ベストプラクティスから始める(Tier 1コード):
プリコンパイル済み(縮小/圧縮)され、サーバー圧縮と遠い将来のヘッダーで提供される2つのファイルがあります。ヘッダーの結果として、これらのファイルは最初のリクエストでクライアントブラウザーによってキャッシュされ、その後、キャッシュの有効期限が切れるまで、またはパージされるまで、すべてのページで使用されます。
ファイルは、透過プロキシによってキャッシュされる場合もあります。ISPはこれらを使用して、顧客のネットを高速化します。これにより、リクエストがさらに削減されます。
したがって、パフォーマンスの観点からは、最初のリクエストのみが高額になります。
管理セクション(Tier 2コード)
管理セクションがあるサイトでは、それを別のファイルのペアにスピンオフするのが非常に一般的です。管理者はjquery-uiを使用する可能性がありますが、パブリックサイトは使用しません。その場合、これが最善の妥協案です。すべての公開リクエストに対して、完全に未使用のライブラリを提供する必要はありません。
Railsパイプラインガイドには、これを設定する方法が記載されています。
ページコード(Tier 3)
3番目のレイヤーは、ページ固有のjsおよびcss(あなたの質問)用です。
その場合、パフォーマンス/メンテナンスの面で電話をかける必要があります。コードのビットが多い場合は、これらすべてを分離する必要があり、アセットパイプラインのプリコンパイル配列に追加する必要があります。たくさんあるかコードが小さい場合、これは苦痛です。
これを行う必要がある(または望んでいる)ことは、CSSの全体的な設計を改善できる可能性があることをプログラマーであるあなたに知らせることができます。特定のページに多くのルールを追加する必要がある場合は、CASCADE(CSSのC)を使用していない可能性があります。:-)
オブジェクト指向のCSSは、この問題に対する1つの答えです。弟子として、それはどこでも使用できるCSSの再利用可能なブロックを定義することです。そうすれば、パフォーマンス(すべてのページのルールを含む)またはメンテナンスの観点から、ページ固有のルールの数が少なくても問題は少なくなります。
ページごとに個別のファイルが必要な場合は、これらのファイルのパイプラインのベストプラクティスに従うことで、少なくともファイルのキャッシュ可能性がトレードオフになることはありません。
私のプロジェクトで行っているのは、ビューがメインアプリケーションレイアウトのファイルとコードをスタックできるようにするヘルパーを提供することです。これの利点は、ページの中央ではなく、生成されたコードが表示される場所を制御できることです。これは、ビューの部分にファイルを含めると発生します。(ミッドページファイルにはブロックレンダリングが含まれているため、これはページレンダリングのパフォーマンスに非常に悪いです)
私はこれをします:
application_helper.rb
def deferred_javascript(&block)
@deferred_javascript ||= []
if block_given?
@deferred_javascript << capture(&block)
end
@deferred_javascript
end
def deferred_javascript_files
@javascript_includes ||= []
end
def deferred_css_files
@stylesheet_includes ||= []
end
そして、ビューで:
<% deferred_javascript_files << 'extras/public_form' %>
<% deferred_css_files << 'extras/public_form' %>
または、ワンライナーの場合は、deferred_javascriptヘルパーでブロックを使用できます。(私はこれをめったに使用しません)。
public_formファイルは、このフォームに必要なもの(jquery-ui、formtastic)のマニフェストであり、他のページでは必要ありません。
注意:このように使用されるファイルはすべて、プリコンパイル配列に追加する必要があります。
config.assets.precompile += ['extras/public_form.css', 'extras/public_form.js']
私のメソッドは開発モードで動作するため、忘れがちですが、本番環境にデプロイすると失敗します。
最後に、アプリケーションレイアウトの、CSSの上部(headタグ内)にあります。
<%= stylesheet_link_tag('application', :media => 'all' ) -%>
<%= stylesheet_link_tag(deferred_css_files) if deferred_css_files.any? %>
JSのレイアウトの下部(終了ボディタグの前):
<%= javascript_tag do %>
$(document).ready(function() {
<%= raw deferred_javascript.join("\n") %>
});
<%- end unless deferred_javascript.blank? -%>
<%= javascript_include_tag 'application' %>
<%= javascript_include_tag(deferred_javascript_files) if deferred_javascript_files.any? %>
この行は、メインマニフェスト、およびビューマニフェストとコードを追加します。
私が概説したことは、ビューが追加されたファイルがパイプラインの一部であり、メインファイルと同じようにキャッシュされる可能性があることを保証します。
要約する:
すべてをメインマニフェストに配置することは、ほとんどの場合正しいことですが、ページ固有のコードが非常に大きい場合は、別のファイルに移動して、概説したとおりに提供できます。どのアプローチが優れているかについてパフォーマンスコールを行う必要があります。すべてのページに追加のコードを配置したり、1つのページに追加のファイルリクエストを配置したりする必要はありません。