你如何加快Rails资产pipe道预编译过程?
有什么方法可以加快Rails资产pipe道预编译过程?
1.卡皮斯特拉诺部署加速
(1)使用capistrano内置的任务“部署/资产”进行部署。
Capistrano拥有自己的内置任务“部署/资产”。 它会自动为你做任务。
你自己的手工任务之间的区别是它只负载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 /资产
- 供应商/资产
- Gemfile.lock的
- confir / routes.rb中
被改变,它会重新编译资产。 否则,它将跳过编译过程,节省很多时间。
2.仔细使用@import。
(1)避免使用@import "compass";
直。
它会同时工作,当你
@import "compass";
或@import "compass/typography/links/link-colors";
在SCSS。
但是@import "compass/typography/links/link-colors";
比@import "compass";
快9倍@import "compass";
当你编译资产。
那是因为@import "compass";
,它编译整个指南针资产。 不仅仅是link-colors
部分。
(2)避免使用偏分量
在SCSS,我们喜欢用partial
来组织我们的资产。
但是,只有当你需要共享variables,或者有必要的依赖,否则
//= 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/
它会花费你大约250毫秒来编译它们中的每一个。 如果你有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仍然需要一些时间。
总结
- replacedeploy.rb资产任务。
-
检查日志/ production.log
- find缓慢的资产
- 删除@import“指南针”; 使用替代scheme。
- 使用require而不是@import; (当真的有必要的时候使用@import)
- 删除require_tree,分别挂载资产
- 删除空的.scss和.coffeescript
- 资产是纯CSS时使用.css。
我刚刚写了一个gem来解决Rails里的这个问题,叫turbo-sprockets-rails3 。 它可以加速您的assets:precompile
仅通过重新编译已更改的文件进行assets:precompile
编译,只编译一次即可生成所有资源。
请注意,我也试图将此修补程序合并到Rails 4.0.0,可能Rails 3.2.9(请参阅https://github.com/rails/sprockets-rails/pull/21 )。 但是现在呢,如果你能帮我testing一下turbo-sprocket-rails3gem,那就太棒了,让我知道你是否有什么问题。
(2)避免使用偏分量
在SCSS,我们喜欢用部分来组织我们的资产
在最新的railsconf中引入了libsass。
可能事情会改变和重写在C中,scss部分承诺会更快