如何加快 Rails 3+ 中的资产预编译?

Posted

技术标签:

【中文标题】如何加快 Rails 3+ 中的资产预编译?【英文标题】:How do I speed up asset precompiling in Rails 3+? 【发布时间】:2012-02-08 23:32:41 【问题描述】:

每次在对 JS 或 CSS 文件进行更改后将代码拉入我的存储库时,我都会运行以下命令:

rake assets:clean
rake assets:precompile

我有很多资产,所以这个过程总是至少需要一分钟。有什么办法让它跑得更快吗?例如,如果我只更改了 CSS,有没有办法告诉它只关注 CSS 文件而不是清理和预编译 JS?

编辑:糟糕,我应该指定这是在生产中。我知道我不需要在开发时预编译资产:)

【问题讨论】:

【参考方案1】:

我假设您正在运行 Rails >3.1。

根本不要运行 rake 任务。 Rails 开发模式不需要预编译资产。当有变化时,Rails 会自动编译资产,否则不会。

如果您在为开发中的资产提供服务时正在寻找性能,您可以查看诸如 https://github.com/wavii/rails-dev-tweaks 之类的宝石

【讨论】:

刚刚编辑了我的问题以指定我正在尝试加快 production 的资产预编译。不过,感谢您提供的链接,看起来这在开发环境中编码时会有所帮助。 在部署或处理第一个请求时何时编译资产?无论哪种情况,它都会很慢。大部分为编译速度慢而烦恼的人,一般都是在开发机上编译资源,然后将编译好的资源推送到生产服务器作为捷径。 我在部署后立即编译。我假设如果我在本地编译,它会和服务器上的广告编译一样慢? 通常在开发机器上并不慢。我不确定确切的原因。您可以尝试使用“bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile”,看看它是否更快或相同。如果这种方法更快,您还可以查看 'github.com/dnagir/guard-rails-assets' gem 以自动编译生产资产【参考方案2】:

这是一个不假装是答案的插件。

Windows 中的进程监视器显示 ruby​​.exe 在执行 assets:precompile 时会产生循环,并且在每个循环中它会一次又一次地查询所有已安装的 gem。

Rails 3.2.1

【讨论】:

以上是关于如何加快 Rails 3+ 中的资产预编译?的主要内容,如果未能解决你的问题,请参考以下文章

加速资产:使用 Rails 3.1/3.2 Capistrano 部署预编译

未使用 Rails 测试环境中的预编译资产

Rails 3.1 资产预编译 - 包括所有 javascript 文件

Rails 3.1 资产管道 - 为啥我的图像没有为生产进行预编译?

Rails 3.1.1 资产预编译 - rake 中止

Rails 预编译供应商/资产