0

Rails 3.2.9 とtwitter-bootstrap-rails gemを使用して Web サイトを構築しています。

Rails Asset Pipeline がすべての CSS を 1 つのファイルにマージすることを理解しています。ただし、この動作を変更するのはどれほど簡単なのだろうか (これが良いアイデアかどうかはわかりません)。

Siteと の2 つのアクションを持つコントローラーがhomeありcontact_us、次の CSS があるとします。

  • site.css.scss-コントローラーのすべてのアクションでロードする必要がありますSite
  • home.css.scss-コントローラーhomeのアクションでのみロードする必要がありますSite
  • contact_us.css.scss-コントローラーcontact_usのアクションでのみロードする必要がありますSite

どうすればこれを達成できますか?

4

2 に答える 2

2

ページの読み込みごとに分割するのは良い考えではないと思います。プロダクション モードでは、すべてが 1 つのファイルに含まれるため、すべての CSS を一度だけロードする必要があります。そのため、後続のすべてのページの読み込みで再度読み込まれることはありません。サイズだけでなく、ウェブサーバーへの接続数とリクエスト数も重要です。多くの場合、少ないほど良いです。

ただし、本当に必要な場合は、テンプレートの head セクションにコンディショナル タグを含めることができます。

stylesheet_link_tag 'home' if controller.action_name == 'home'
stylesheet_link_tag 'contact_us' if controller.action_name == 'contact_us'

コントローラー名を取得することもできますcontroller.controller_name

于 2012-12-09T11:05:52.100 に答える
0

Rails Asset Pipeline がすべての CSS を 1 つのファイルにマージすることを理解しています。ただし、この動作を変更するのはどれほど簡単なのだろうか (これが良いアイデアかどうかはわかりません)。

CSS ファイルを 1 回だけ取得する利点が失われるため、これは良い考えではないと思います。それがあなたの目標かどうかはわかりませんが、サーバーリソースを節約することはできません。特定のファイルに対する追加のリクエストを作成するのはちょっと高価です。

とにかく、application.css.scss にファイルのツリーを必要とせずに (または特定のフォルダーを作成して)、手動で stylesheet_link_tag を呼び出すことで実行できます (これを content_for ヘルパーと組み合わせて、必要な場所を正確に指定できるようにする必要があります)。表示するには、 content_for メソッドの使用を参照してください)

于 2012-12-09T11:08:14.520 に答える