有哪些方法可以加快Railsassets资源 管道预编译过程?

推荐答案

1.Capistrano部署加速

(1) 使用capistrano内置任务"部署/assets资源 "进行部署.

Capistrano有自己的内置任务"部署/assets资源 ".它会自动为您完成任务.

您自己的手工任务之间的区别在于,它只加载assets组预编译assets资源 ,而不是整个环境.

cd /home/apps/APP_NAME/releases/20120708184757 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile

(2) assets资源 未更改时跳过预编译过程.

https://gist.github.com/3072362

如果

  • 应用程序/assets资源
  • 图书馆/assets资源
  • 供应商/assets资源
  • Gemfile.锁
  • 确认/路由.rb

如果发生更改,它将重新编译assets资源 .否则,它将跳过pecompile过程,节省大量时间.

2.小心使用@import.

(1) avoid using @import "compass"; directly.

当你

在SCSS中为@import "compass";@import "compass/typography/links/link-colors";.

但在编译assets资源 时,@import "compass/typography/links/link-colors";@import "compass";快9倍.

这是因为当@import "compass";时,它会编译整个指南针assets资源 .不仅仅是link-colors部分.

(2) 避免使用partials

在SCS中,我们喜欢使用partial来组织我们的assets资源 .

但只有当你需要共享变量,或者有必要的依赖关系,否则

//= require "reset"
//= require "base"
//= require "product"

@import "reset";
@import "base";
@import "product";

3. don’t require .scss & .coffee for no reason

(1) 避免使用树

当我们使用Rails生成器生成控制器时.Rails还将生成这样的assets资源

  • 产品css.scss
  • 产品js.咖啡

并在应用程序中装载assets资源 .js使用以下技术:

//= require_tree

但是空assets资源 (不输出)只包含以下行:

# 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/

It will cost you about 250ms to compile each of them. 如果 you have 10 empty assets, it will be 2.5 seconds .

从项目中删除它们,或在应用程序中单独装载它们.像这样:

//= require prodcuts
//= require users
//= require albums

(2) Don't use css.scss or js.coffee if unnecessary.

  • 编译jquery-ui-1.8.16.风俗css(0毫秒)(pid 19108)
  • 编译jquery.用户界面.1.8.16.ie.css(0ms)(pid 19108)
  • 编译jquery.js(5ms)(pid 19108)
  • 编译jquery_ujs.js(0毫秒)(pid 19108)
  • 编译自定义.css(14毫秒)(pid 19108)

custom.css等于custom.css.scss

编译纯CSS和纯JS的速度很快(几乎需要0毫秒).但是编译.scss和.咖啡仍然需要一些时间.

总结

  1. 替换部署.rbassets资源 任务.
  2. 判断日志(log)/生产记录.日志(log)

    • 寻找慢assets资源
    • 删除@import"compass";使用替代方案.
    • 使用require代替@import;(必要时使用@import)
    • 移除树,单独装载assets资源
    • 取出空的.scss和.咖啡脚本
    • 使用assets资源 是纯css时的css.

Ruby-on-rails相关问答推荐

HTTP:MimeNegotiation::InvalidType(html不是有效的MIME类型):""

has_many 通过大小验证

如何创建一个融合了另外两个记录的 FactoryBot 工厂?

如何从 Ruby on Rails 应用程序返回正确的 HTTP 错误代码

耙路由错误缺少:路由定义上的操作键

回形针图片网址

OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A

Rails ActiveRecord 查询日期范围

Rails 服务对象与 lib 类

Rails - 从日期和时间戳获取日期

使用 jQuery 在 Rails 中不显眼的动态表单字段

在 Rails 中复制模型实例

使用 rvm 更新 ruby​​ 版本后收到警告消息Path set to RVM

如何在 Rails 3 中将多个属性传递给 find_or_create_by?

在 Rails 路由中更改 id 参数

错误:无法构建 gem 原生扩展 - 安装 mysql2 时出错

从 Rails 中的 ActiveRecord::RecordNotFound 救援

Rails 在 id 字段上重置种子的方法

Ruby on Rails Bootstrap Glyphicons 不工作

ActiveRecord 何时会保存关联?