almost 11 years ago

前年我寫過一篇 3 招實用 Asset Pipeline 加速術

這次打算再追加三招。

1. 加上 cache_store

(如果打算在遠端 Compile Asset 的話)

Rails 3

config/enviorments/production.rb

config/enviorments/production.rb
config.assets.cache_store = :dalli_store

Rails 4

config/enviorments/production.rb

config/enviorments/production.rb
config.assets.configure {|env|
  env.cache = ActiveSupport::Cache.lookup_store(:dalli_store)
}

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:

Writing /Users/xdite/my_projects/logdown/public/assets/icons/cloud-download-3ddd0707f2f307ba14c27f28e0b293a2.png
Writing /Users/xdite/my_projects/logdown/public/assets/icons/file-image-081d8086dbbde1b8a014b48ab7d78f9b.png
Writing /Users/xdite/my_projects/logdown/public/assets/icons/pen-c0e637cd3afab39f2e71fa3aa281f26e.png
Writing /Users/xdite/my_projects/logdown/public/assets/icons/search-488fbba73b9cc2d919b788a75f11f6f6.png
Writing /Users/xdite/my_projects/logdown/public/assets/icons/shield-b985accbe4b4f9e642de39af2feb1e62.png
Writing /Users/xdite/my_projects/logdown/public/assets/icons/suitcase-eb8f22fb62c98151fe0baa921a944ec6.png
Writing /Users/xdite/my_projects/logdown/public/assets/icons/user-2481c420fc2240c17a86fc39d4dcbfc2.png
Writing /Users/xdite/my_projects/logdown/public/assets/search-icon-b446fa9eac4881a0ffef79cd2f9e3ba5.png
Writing /Users/xdite/my_projects/logdown/public/assets/themes/compiling-e416cf4231664a0b4328f0f9225eb844.jpg
Writing /Users/xdite/my_projects/logdown/public/assets/tours/built-in-theme-083f3cc5f7b6a8adc66c0570ae60cc9b.png
Writing /Users/xdite/my_projects/logdown/public/assets/tours/custom-domain-url-84997f582135b96f0438a34aa456dbdf.png
Writing /Users/xdite/my_projects/logdown/public/assets/tours/custom-themes-5e03d9edc032c5073093805e4c93326c.png

也就是 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 時又省下「幾分鐘」的時候。

← 在 Rails 3 project 上跑 Rails 4 的 Asset Pipeline Rails 4 上 Asset 的一團爛賬 →
 
comments powered by Disqus