前年我寫過一篇 3 招實用 Asset Pipeline 加速術。
這次打算再追加三招。
1. 加上 cache_store
(如果打算在遠端 Compile Asset 的話)
Rails 3
在 config/enviorments/production.rb
Rails 4
在 config/enviorments/production.rb
http://damon.theidealweb.com/development/rails/2013/08/13/correct-way-to-set-config-assets-cache-in-rails-4.html
2. 換成在 local compile asset
asset compile 往往卡在遠端的機器不夠力,所以編譯很慢。但是現在大家的開發機 Mac 系列,其實都是遠遠比遠端的機器快上許多的....
capistrano-local-precompile 這個 Gem 可以協助你在 local compile 再 sync 到遠端機器,再自動清掉本地端殘留。
Rails 3
效率會提升一些。
Rails 4
提升非常多倍。(我有一個 project 提升 120 秒以上)
這主要是因為自 Rails 4 起, Sprocket 又進行了大重寫。效率有非常非常顯著的提升....
如果有興趣在 Rails 3 上跑 Sprocket 2 的話,可以參考前幾天我這篇 在 Rails 3 project 上跑 Rails 4 的 Asset Pipeline。
3. 把靜態檔案從 assets/images 下搬出來。
換成 Sprockets2 + local compile 後,我觀察到本地的 log:
也就是 app/assets/images 下的東西其實都是會進行編譯的。編譯這些東西需要耗時間。
而根據 sprockets https://github.com/rails/sprockets-rails 官方的解釋,從 Rails 4 之後值得注意原則是:
- Only compiles digest filenames. Static non-digest assets should simply live in public/.
也就是不需要 compile 的 Asset 鼓勵開發者搬到 public 底下去...。
套用以上這三個原則,應該可以幫你在編譯 Asset 時又省下「幾分鐘」的時候。