你如何加快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.scssjs.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.csscustom.css.scss

编译纯CSS和纯JS是快速的(花费几乎0毫秒)。 但编译.scss和.coffee仍然需要一些时间。

总结

  1. replacedeploy.rb资产任务。
  2. 检查日志/ 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部分承诺会更快