开发模式下的资产编译速度慢

我有一个包含数百个咖啡脚本文件的大型rails应用程序。

有时当我对coffeescript文件进行微小更改或切换分支时,整个资产都被预编译,我必须等待很长时间才能加载页面:

Started GET "/assets/application.js" for 127.0.0.1 at 2013-01-11 19:39:45 +0100 Compiled sprockets/commonjs.js (0ms) (pid 18142) Compiled jquery.js (2ms) (pid 18142) Compiled jquery_ujs.js (0ms) (pid 18142) Compiled underscore.js (0ms) (pid 18142) Compiled backbone.js (0ms) (pid 18142) Compiled backbone_rails_sync.js (0ms) (pid 18142) Compiled handlebars.runtime.js (0ms) (pid 18142) Compiled moment.js (0ms) (pid 18142) ...and so on 

我使用以下资产配置config/development.rb

 # Do not compress assets config.assets.compress = false # Expands the lines which load the assets config.assets.debug = false 

当我设置config.assets.debug = false我必须等待很长时间才能加载数百个js文件。 问题是:如何找到中庸之道? 如何在大型应用程序的开发模式下优化资产配置?

这是一个可悲的事实,但你没有。 没有一种干净的方法来解决这个问题。

但是,您可以遵循一些模式来最小化您的痛苦,如果我理解正确,必须等待很多开发才能看到变化。

如上所述,这里已经看到1和这里2 。

  1. 从这里看第2 项 。
  2. 在许多文件中打破您的资产。 这意味着在发生更改时处理的行数更少。
  3. 喜欢css / js,它们可能不那么酷但不需要编译。
  4. 在资产预编译时找到有趣的事情。 它可能会降低生产力,但肯定可以消除痛苦。

看看Discourse团队的这个中间件 。 我们在rails 4应用程序中取得了巨大的成功 – 将重新加载时间从一分钟缩短到5秒。

正如其他人所指出的那样,优化资产是提高编译速度的第一种方法(消除不必要的文件和预处理器,谨慎导入,谨慎使用部分)。 但是,为什么在开发模式下转换config.assets.debug = false呢? 当它为false时,sprockets会将所有文件连接在一起,如果你有大量文件,这可能需要很长时间。

相反,请转动config.assets.debug = true ,以便在第一个请求中编译和缓存资产。 Sprockets设置Cache-Control HTTP标头以减少后续请求的请求开销。 浏览器获得304(未修改)响应。 请参阅Rails Asset Pipeline文档。