Rails Asset Pipelineのプリコンパイルプロセスを高速化する方法は何ですか?
3 に答える
1.Capistrano展開の高速化
(1)capistrano組み込みタスク「deploy/assets」を使用してデプロイします。
Capistranoには、独自の組み込みタスク「deploy/assets」があります。それはあなたのために自動的にタスクを実行します。
独自のハンドクラフトタスクの違いは、assets
環境全体ではなく、アセットをプリコンパイルするためにグループをロードするだけであるということです。
cd /home/apps/APP_NAME/releases/20120708184757 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile
(2)アセットが変更されていない場合は、プリコンパイルプロセスをスキップします。
https://gist.github.com/3072362
もしも
- アプリ/アセット
- lib /assets
- ベンダー/資産
- Gemfile.lock
- confir / routers.rb
変更されると、アセットが再コンパイルされます。それ以外の場合は、pecompileプロセスをスキップし、多くの時間を節約します。
2.@importを慎重に使用します。
(1)@import "compass";
直接使用しないでください。
あなたが
@import "compass";
または@import "compass/typography/links/link-colors";
SCSSで。
ただし、アセットをコンパイルする場合@import "compass/typography/links/link-colors";
よりも9倍高速です。@import "compass";
これは、が@import "compass";
コンパスアセット全体をコンパイルするためです。一部だけではありませんlink-colors
。
(2)パーシャルの使用を避ける
SCSSでは、partial
アセットの整理に使用するのが好きです。
ただし、変数を共有する必要がある場合、または必要な依存関係がある場合のみ、それ以外の場合
//= require "reset"
//= require "base"
//= require "product"
よりも速い
@import "reset";
@import "base";
@import "product";
3.理由もなく.scssと.coffeeを必要としない
(1)require_treeの使用を避けます
Railsジェネレーターを使用してコントローラーを生成する場合。Railsもこのようなアセットを生成します
- product.css.scss
- product.js.coffee
次の手法を使用して、application.jsにアセットをマウントします。
//= require_tree
しかし、この行のみを含む空のアセット(何も出力しない):
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
それぞれをコンパイルするのに約250msかかります。空のアセットが10個ある場合、2.5秒になります。
それらをプロジェクトから削除するか、次のようにapplication.jsに個別にマウントします。
//= require prodcuts
//= require users
//= require albums
(2)使用しない、css.scss
またはjs.coffee
不要な場合。
- コンパイルされたjquery-ui-1.8.16.custom.css(0ms)(pid 19108)
- コンパイルされたjquery.ui.1.8.16.ie.css(0ms)(pid 19108)
- コンパイルされたjquery.js(5ms)(pid 19108)
- コンパイルされたjquery_ujs.js(0ms)(pid 19108)
- コンパイルされたcustom.css(14ms)(pid 19108)
custom.css
はcustom.css.scss
純粋なCSSと純粋なJSのコンパイルは高速です(コストはほぼ0ミリ秒)。ただし、.scssと.coffeeのコンパイルにはまだ時間がかかります。
要約する
- deploy.rbアセットタスクを置き換えます。
logs/production.logを確認してください
- 遅い資産を見つける
- @import"compass"を削除します。代替ソリューションを使用してください。
- 代わりにrequire@importを使用してください。(本当に必要な場合は@importを使用してください)
- require_treeを削除し、アセットを個別にマウントします
- 空の.scssと.coffeescriptを削除します
- アセットが純粋なCSSの場合は、.cssを使用します。
Rails内でこの問題を解決するために、turbo-sprockets-rails3と呼ばれるgemを作成しました。assets:precompile
変更されたファイルを再コンパイルするだけで、すべてのアセットを生成するために1回だけコンパイルすることで、速度が向上します。
このパッチをRails4.0.0、場合によってはRails 3.2.9にマージしようとしていることに注意してください(https://github.com/rails/sprockets-rails/pull/21を参照)。しかし、今のところ、turbo-sprockets-rails3 gemのテストを手伝ってくれて、問題があれば教えていただければ素晴らしいと思います。
(2)パーシャルの使用を避ける
SCSSでは、アセットを整理するためにパーシャルを使用するのが好きです
最新のrailsconfには、libsassが導入されました。
おそらく物事はCで変更されて書き直されるでしょう、scssパーシャルはより速くなることを約束します