10

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

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

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 文件。问题是:如何找到中庸之道?大应用开发模式下如何优化资产配置?

4

3 回答 3

7

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

于 2013-12-16T19:31:23.673 回答
2

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

但是,您可以遵循一些模式来最大程度地减少您的痛苦,如果我理解正确的话,您必须在开发中等待很多时间才能看到变化。

如前所述,这些已在此处看到1此处 2

  1. 从这里看一下第 2 项1 。
  2. 在许多文件中分解您的资产。这将意味着在发生更改时处理的行数更少。
  3. 更喜欢 css/js,它们可能不那么酷但不需要编译。
  4. 在资产预编译时找到一些有趣的事情。它可能会降低生产力,但肯定会消除痛苦。
于 2013-01-19T02:09:51.630 回答
0

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

相反, turn config.assets.debug = true,因此资产在第一个请求时被编译和缓存。Sprockets 设置一个 Cache-Control HTTP 头来减少后续请求的请求开销。浏览器收到 304(未修改)响应。请参阅 Rails资产管道文档。

于 2013-01-21T03:06:03.453 回答