bra*_*ing 14 performance precompile ruby-on-rails-3.1 asset-pipeline
在我的开发沙箱中
RAILS_ENV=production rake assets:precompile
Run Code Online (Sandbox Code Playgroud)
需要4分钟才能完成.这是正常的吗?在heroku上花费超过10分钟来完成这项工作,有时会超时.有没有办法解决这个问题和/或加快速度?
UPDATE
我分析了编译的CSS和JS阶段
3.7 s js
175 s css
Run Code Online (Sandbox Code Playgroud)
这些数字是通过这里的仪器制作的
----------------------
/Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@gobbq/gems/sprockets-2.1.2/lib/sprockets/processing.rb
----------------------
266 # Assign a compressor to run on `application/javascript` assets.
267 #
268 # The compressor object must respond to `compress` or `compile`.
269 def js_compressor=(compressor)
270 expire_index!
271
272 unregister_bundle_processor 'application/javascript', :js_compressor
273 return unless compressor
274
275 register_bundle_processor 'application/javascript', :js_compressor do |context, data|
276
277 timeit "js" do
278 compressor.compress(data)
279 end
280
281 end
282 end
Run Code Online (Sandbox Code Playgroud)
和
----------------------
/Users/bradphelan/.rvm/gems/ruby-1.9.2-p180@gobbq/gems/sprockets-2.1.2/lib/sprockets/processing.rb
----------------------
241
242 # Assign a compressor to run on `text/css` assets.
243 #
244 # The compressor object must respond to `compress` or `compile`.
245 def css_compressor=(compressor)
246 expire_index!
247
248 unregister_bundle_processor 'text/css', :css_compressor
249 return unless compressor
250
251 register_bundle_processor 'text/css', :css_compressor do |context, data|
252 timeit "css" do
253 compressor.compress(data)
254 end
255 end
256 end
Run Code Online (Sandbox Code Playgroud)
该timeit调用增加位做计时
def timeit context
s = Time.now
yield.tap do
e = Time.now
d = e - s
puts "#{d*1000}\t #{context}"
end
end
Run Code Online (Sandbox Code Playgroud)
我在Rails 3.2.13上 - 我遇到了与css压缩相同的问题需要很长时间.修理:
在Gemfile中添加:
gem 'yui-compressor'
Run Code Online (Sandbox Code Playgroud)
在config/environments/production.rb中:
config.assets.css_compressor = :yui
config.assets.js_compressor = :yui
Run Code Online (Sandbox Code Playgroud)
rake资产:没有这些更改的预编译:325秒
rake资产:使用这些更改进行预编译:79秒
rake资产:没有压缩的预编译:45秒
hackety hack 解决方案似乎是对标准 sass 压缩引擎进行猴子修补。我将其添加到我的 application.rb 的顶部
module Sass
module Rails
class CssCompressor
def compress(css)
css
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
猴子补丁之前的文件大小差异为 124k,之后的文件大小差异为 125k,速度提高了一个数量级。