有哪些方法可以加快Rails Asset Pipeline预编译过程?
答案 0 :(得分:79)
Capistrano有自己的内置任务'部署/资产'。它将自动为您完成任务。
您自己的手工任务之间的区别是它只加载assets
组来预编译资产,而不是整个环境。
cd /home/apps/APP_NAME/releases/20120708184757 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile
https://gist.github.com/3072362
如果
已更改,它将重新编译资产。否则,它将跳过pecompile进程,节省大量时间。
@import "compass";
。当你
时它都会起作用 SCSS中的 @import "compass";
或@import "compass/typography/links/link-colors";
。
但是编译资产时@import "compass/typography/links/link-colors";
比@import "compass";
快9倍。
这是因为当@import "compass";
时,它会编译整个罗盘资产。不仅仅是link-colors
部分。
在SCSS中,我们希望使用partial
来组织我们的资产。
但是只有你需要共享变量,或者有必要的依赖,否则
//= require "reset"
//= require "base"
//= require "product"
比
快@import "reset";
@import "base";
@import "product";
当我们使用Rails生成器生成控制器时。 Rails还会生成像这样的资产
并使用以下技术在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
css.scss
或js.coffee
。 custom.css
是custom.css.scss
编译纯CSS和纯JS很快(成本差不多0毫秒)。但是编译.scss和.coffee仍需花费一些时间。
检查logs / production.log
答案 1 :(得分:20)
我刚刚编写了一个gem来解决Rails中的这个问题,称为turbo-sprockets-rails3。它只通过重新编译已更改的文件来加速assets:precompile
,并且只编译一次以生成所有资产。
请注意,我也试图将此补丁合并到Rails 4.0.0中,可能还有Rails 3.2.9(参见https://github.com/rails/sprockets-rails/pull/21)。但是现在,如果你可以帮我测试turbo-sprockets-rails3宝石,那就太棒了,如果你有什么问题请告诉我。
答案 2 :(得分:2)
(2)避免使用部分
在SCSS中,我们喜欢使用partial来组织我们的资产
在最新的railsconf上引入了libsass。
可能事情会发生变化并在C中重写,scss partials承诺会更快