6

Rails 3.0.x (特に Heroku) でアセットを管理するためのさまざまなツールの長所と短所に興味があります。

このトピックに関してはすでにいくつかの古い質問がありますが、それまでの間、いくつかの新しいツールが利用可能です。

私はこれらのツールに特に興味があります:

Jammit は、AssetHat が実行できるすべてのことを実行できるようで、さらに利用可能になっています。では、AssetHat はどこに適合するのでしょうか?

Rack PageSpeed は、サーバーの応答を直接操作することで、すべてをオンザフライで実行しているようです。そうすることで、パフォーマンスの問題が発生しましたか? 他の 2 つのソリューションよりもお勧めしますか?

4

3 に答える 3

14

こんにちは、私は AssetHat の作成者です。縮小と連結は、実装が最も簡単なパフォーマンス向上の 1 つです。これらの機能は Jammit、AssetHat、rack-pagespeed に共通です。Rails は長い間連結をサポートしてきました (ただし、展開時ではなく実行時に行われます)。Rails 3.1 が展開時に縮小と連結の両方をサポートしていることは驚くことではありません。

残りの機能は、これらのアセットマネージャーのそれぞれを興味深いものにしています. たとえば、Jammit は、画像やフォント ファイルをスタイルシートに直接埋め込みたい場合に便利です。すべての最適化を完全に別のレイヤーに保持したい場合は、rack-pagespeed も便利です。

CSS へのアセットのインライン化は、スタイルシートが頻繁に変更されない静的ページに最適です。ただし、サイトが活発に開発されており、スタイルシートが少しでも変更された場合、ユーザーのブラウザーは、おそらく変更されていないインライン画像やフォントを含め、すべてを再ダウンロードする必要があります。それはプロジェクトの性質によって異なります。

アセットが大きすぎてインライン化または連結できない場合、AssetHat は CDN と並列読み込みの最適化に役立ちます。

  • Google の CDNcdnjs ( Amazon のサーバーを使用)、または選択した別の CDN のいずれであっても、CDN を大いに活用します。たとえば、<%= include_js :jquery %>レイアウト (および構成ファイル内のバージョン番号) に追加するだけで、Google の CDN から jQuery をロードできます。開発モードで jQuery のローカル コピーを持っている場合は、代わりにそれが読み込まれます — 簡単なオフライン開発。
  • AssetHat は、代わりにCDN を使用するようにスタイルシートの画像 URL を書き換えることができます。これは設定から​​読み取らconfig.action_controller.asset_hostれ、デプロイ時に行われます。元の CSS はそのまま残ります。
  • ロードする JS ファイルが複数ある場合は、それらを連結するよりも並列でロードする方が高速な場合があります (つまり、強制的に順次ロードします)。LABjsモードは簡単にオンにできます: <%= include_js 'big-file-1', ..., 'big-file-n', :loader => :lab_js %>. ローカルに LABjs のコピーがない場合、または運用環境にある場合、LABjs は cdnjs を介して Amazon のサーバーからロードされます。

Google や Amazon などの CDN を使用することで、ユーザーはより多くのアセットを並行してロードでき (ホスト名が多いため)、速度が向上し、場合によってはアセットをダウンロードする必要さえありません (Google の jQuery のコピーを既にロードしている場合など)。他の人のウェブサイト経由)。

Heroku で AssetHat を使用しました。デプロイ スクリプトを単純に実行するように設定しrake asset_hat:minify(CSS/JS を縮小して連結するため)、それらの変更をリポジトリにコミットしてから、実際のデプロイを行いました。

これらをまだ見ていない場合は、次のことに興味があるかもしれません。

セットアップのサポートが必要な場合、またはその他の質問がある場合は、GitHub ( rondevera ) または Twitter ( @ronalddevera ) でお気軽にメッセージを送ってください。

于 2011-05-30T21:57:54.503 に答える
1

私が知る限り、Jammit は Heroku でそのままでは動作しません。1 つのオプションは、Heroku Jammit プラグインを使用してアセットを管理することです - https://github.com/chebyte/heroku-jammit

または、/tmp に出力するように Jammit を構成することもできます: http://geekninja.blogspot.com/2011/04/making-jammit-jam-with-heroku.html

Rails 3.1 には、アセットのパッケージ化を処理するための Sprockets が含まれます。これは検討する価値があると思います。

于 2011-05-30T22:24:04.927 に答える
0

私は現在、Amazon s3と一緒にherokuでjammitを使用していますが、これは魅力のように機能します:)

他のツールは使ったことがないのであまり言えません。

結局、どちらを選びましたか?

フェルナンド。

于 2011-07-25T14:55:56.853 に答える