0

Rails3.2のAssetPipelineについて私が理解していないことの1つは、次の行を含むapplication.jsファイルへの参照をいくつか見たことです。

//= require_tree .

これにより、すべてのJavaScriptがすべてのページに読み込まれるというのは本当ですか?実際には、ユーザーが「カテゴリ」ページを表示しているときに「製品」のCoffeeScriptをブラウザにロードしたくないので、そのコードは使用されません。

上記の動作がrequire_treeアセットパイプラインでの動作の正確な説明である場合、特定のビューに必要なCoffeeScriptのみがすべてではなく、ロードされるようにする方法はありますか?

4

1 に答える 1

3

これにより、すべての単一ページにすべての JavaScript が読み込まれるというのは本当ですか?

はい、これはそれがすることです。Rails は、CoffeeScript を JavaScript にコンパイルし、それらを連結して (本番環境で) 1 つのファイルに縮小します。そのファイルはすべてのページに含まれます。

なぜなら、ユーザーが「カテゴリ」ページにいるときに、「製品」CoffeeScript をブラウザーにロードしたくないからです...

そうです。それが要点です。この 1 つのバンドルされた JavaScript ファイルがすべてのページに読み込まれます。このように、ブラウザは最初のリクエスト時にサイト全体の JavaScript を 1 つのファイルとして一度ダウンロードし、他のすべてのページでキャッシュされたコピーを使用します。

...そのコードは使用されないため

すべてのページに余分なコードを含めても、実行してキャッシュから読み込まなければ、文字通りコストはかかりません。一方、外部 JavaScript のリクエスト数を最小限に抑えているため、大幅な節約になります。つまり、スクリプトをすぐに実行でき、DOM 対応のイベントがはるかに早く発生します。

これが安全であること、および影響を受けるはずのサイトの部分のみをコードが対象とすることを確認するのはあなた次第です。通常、これを行うには、ID で特定の要素を選択し、ID がページ間で共有されないようにし、特別な意味を持つクラスを、それらを持つべきではない要素に適用しないようにします。

すべてではなく、特定のビューに必要な CoffeeScripts のみが読み込まれるようにする方法はありますか?

いいえ、ページごとに個別のマニフェスト ファイルを作成しないと、アセット パイプラインを使用する主な目的の 1 つが無効になります。これをしないでください。縮小された JavaScript バンドル ファイル全体をすべてのページに含めることは、正しく、望ましく、意図的です。

于 2012-09-21T02:04:00.080 に答える