Webアプリケーションを設計するための適切なワークフローとは何ですか?


9

かなりのWeb開発を行ってからしばらく経ちましたが、最新のプラクティスを活用したいのですが、ワークフローを視覚化してすべてを組み込むのに苦労しています。

これが私が使用しようとしているものです:

  • CakePHPフレームワーク
  • jsmin(JavaScript Minify)
  • SASS(Synctactically Awesome StyleSheets)
  • ギット

CakePHP:

かなり自明で、修正を加えてソースを更新します。

jsmin:

スクリプトを変更する場合、jsminを手動で実行して新しい縮小コードを出力しますか、変更されたjavascriptファイルのjsmin出力を自動的に生成するpre-commitフックを実行する方が良いでしょう。コミットフックを実装する知識がないと仮定します。

SASS:

私はSASSが提供するものを本当に気に入っていますが、SASSコードがデフォルトでブラウザーでサポートされていないことも知っているため、ある時点で、SASSコードを通常のCSSに変換する必要があります。ワークフローのどの時点でこれが行われます。

ギット

私はそれを認めるのは恐ろしいですが、実質的なWeb開発を最後に行ったとき、SCMソース管理を使用しませんでした(IE、私はソース管理を使用しましたが、バックアップ付きの非常に詳細な変更ログで構成されていました)。

それ以来、デスクトップ開発にGit(およびmercurialとSVN)を使用した多くの経験がありますが、Web開発に最適に実装する方法を知りたいと思います)。

変更を本番サーバーに直接プッシュできるように、リモートリポジトリをウェブホストに実装することは一般的ですか、または変更されたファイルのみを本番サーバーに簡単にアップロードできるクロスプラットフォーム(windows / linux)ツールがありますか? 。リモートリポジトリを簡単に実装できるウェブホスティング会社はありますか、SSHアクセスなどが必要ですか?

別のリモートトラッキングブランチを備えたリモートリポジトリを備えた自分のテストサーバーでこれを行う方法をすでに知っていますが、リモートの本番ウェブホスティングサーバーでこれを実行したことがないため、オプションをまだ認識していません。

追加:

ページで必要なファイルのダウンロード数を制限するために、ページで使用される個別のJavaScriptファイルを本番サーバーのページごとに1つのファイルにコンパイルするJavaScriptフレームワークの実装を検討していました。

このようなものはすでに存在していますか?私が使用して貢献できる同様の何かを実装するオープンソースプロジェクトがすでに実際に出回っていますか?

偏執的なWeb開発者がパフォーマンスについてどのように考えるか(およびWebサイト上のファイル要求の数がパフォーマンスに大きな影響を与えるという事実)を考えると、すでにこの問題に対処しているウィザードハッカーがネット上にいると思います。

回答:


2

あなたはApache用のGoogleのPageSpeed拡張機能をチェックすることができます:afaik、JavascriptとCSSを自動的に集約および縮小し、キャッシュと組み合わせるオプションがあります。これはあなたがあなたが投稿の最後に探しているとあなたが言っていることと一致します。


1
かっこいい、私はこれらすべてが1つのApacheモジュールでできることを知りませんでした。Javascript / cssの縮小、javascript / cssの連結、およびその他のオプションのパフォーマンスの向上。いくつかのグーグルの後、Dreamhostが共有/ VPNホスティングを提供していることさえわかりました。webmasters.stackexchange.comやstackoverflow.comにそれ以上の情報がないことに驚いています。
エヴァンプレイス、2011年

5

jsmin

大量のJSがない場合は、保存を押すたびに縮小するように設定できます。JSがたくさんある場合は、それをデプロイメントプロセスの一部にします(以下のGitを参照)。

SASS

コンパスフレームワークを使用します。SASSに加えて、SASSディレクトリを「監視」し、保存するたびにファイルをCSS(必要に応じて縮小版CSSを含む)にコンパイルする小さなスクリプトが含まれています。RoRを念頭に置いて構築されていますが、コンパス構成ファイルを作成して「compass watch」コマンドを実行することで、任意のWebフレームワークで簡単に使用できます。コンパスには、ブループリント便利なミックスインレモネードプラグインを介した自動スプライト生成(次のリリースでコンパスに組み込む必要がある)など、その他の便利なツールも多数含まれています。

ギット

サイトのサイズ/複雑さに応じて、カピストラーノに従うことを検討してください展開モデル。CapistranoをCakePHPで直接使用できるかどうかはわかりませんが、要点は次のとおりです。各プロダクションサーバーには、その時点でプロダクションで実行されているすべてのコードを含む「現在の」フォルダーがあります。新しいコードをデプロイするたびに、各本番サーバーにsshで実行するスクリプトを実行し、(a)「現在の」フォルダーの内容をバックアップフォルダーにコピーします(リリース名/タイムスタンプを含む)、( b)Gitの最新コードを「現在の」フォルダーにチェックアウトし、(c)「現在の」フォルダーからこの新しいコードの提供を開始します。このようにして、必要に応じて以前のリリースにロールバックし、どのリビジョンが本番環境でライブであるかを正確に知ることができます。Capistranoでは、JS / CSSミニファクションを含む、あらゆる種類のカスタムタスクをデプロイメントプロセスの一部として追加することもできます。

追加

はい、たくさんあります。「CSS / JS concat」のようなもののためのグーグル。これがCakePHPで見つけた簡単なものです:Asset Packer


入力いただきありがとうございます。Compass Frameworkで見たものが本当に気に入っています。私はそれをPHPにデプロイする方法を知っていることだけを望みます。私はググってみましたが、代わりを見つけることができません。Capistranoも非常に興味深いように見えますが、高価で壊れやすいファイルコピーモデルの代わりに、sshを使用して、すべてのリモートサーバーのgitクライアントに、テストで機能したことを確認した後、すばやく「git pull --rebase」を実行するように指示します最初にサーバー。
エヴァンプレイス

(続き)アセットパッカーも非常に興味深く見えます。私があなたの答えよりも他の答えを選んだ唯一の理由は、サーバー自体で処理が行われているため、すべてが一挙に含まれていたことです(追加のスクリプトは必要ありません)。唯一私がページスピードに見やすい静的コンテンツのキャッシングおよび/またはCDNを使用してアドレス指定された静的コンテンツの追加処理を(された下振れ私は本当にあなたの答えは、貴重な情報をたくさん持っているので、私は2を受け入れることができることを望む。。
エヴァン・アカガレイ

PHPでCompassフレームワークを「デプロイ」することはありません。コーディング中に実行するだけで、saveを押すたびにCSSファイルがコンパイルされ、CSSファイルが実際にデプロイされます。コンパスを「実行」するには、最初に構成ファイル(compass.rb)を生成する必要があります。これを使用して、コマンドラインオプションjsfiddle.net/chriseppstein/PG46q/3を生成します。すべてのパスで設定ファイルを設定したら、設定ファイルと同じフォルダーで「compass watch」を実行するだけで、保存を押すたびにコンパスがSASSの再コンパイルを開始します。サイドプロジェクトで試してみてください。非常に簡単で高速です。
Yevgeniy Brikman、2011

また、私が知る限り、カピストラーノはコピーをあまり行いません。デプロイするたびに、最新のコードがチェックアウトされ、フォルダ名が交換されるだけです。利点は、フォルダー名を再度交換するだけで、常に以前のバージョンにロールバックできることです。
Yevgeniy Brikman、2011

それをPHP内で起動して実行する方法についての記事を見つけました。Rubyプロジェクトの外では、思ったより簡単に使用できます。カピストラーノに関する私の最後のコメントをスクラッチします。複数のサーバーに分散コマンドを送信するために使用されていると思いました。リモートサーバーへのsshアクセス権がある場合、本番ブランチから最新の変更をプルする手段としてgitクライアントをドロップしたほうがいいでしょう。私見、フォルダーのフォルダー交換は悪い考えです。リリースサイクルでリビジョンにタグを付けて、現在のタグに問題がある場合は以前のタグをチェックアウトすることをお勧めします。
エヴァンプレイス、2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.