0

关于 Rails 3.2 中的资产管道,我不明白的一件事是我看到了对 application.js 文件的多个引用,其中包含以下行:

//= require_tree .

这是否会在每个页面上加载我所有的 javascript?因为真的,当用户在“类别”页面(例如)时,我不希望将“产品”CoffeeScript 加载到浏览器,因为不会使用任何代码。

如果我上面所说的行为是require_tree对资产管道中如何工作的准确描述,有没有办法确保只加载特定视图所需的 CoffeeScripts 而不是全部?

4

1 回答 1

3

这是否会在每个页面上加载我所有的 javascript?

是的,这就是它的作用。Rails 会将您的 CoffeeScripts 编译成 JavaScript,然后将它们连接并缩小(在生产中)到一个文件中。该文件将包含在每个页面中。

因为真的,当用户在“类别”页面上时,我不希望将“产品”CoffeeScript 加载到浏览器中......

是的你是。这就是重点。这个捆绑的 JavaScript 文件加载到每一页上。这样,浏览器在第一次请求期间将整个站点的 JavaScript 作为一个文件下载一次,并在每个其他页面上使用缓存副本。

...因为不会使用任何代码

如果没有从缓存中执行和加载,在每个页面上包含额外的代码实际上是没有成本的。同时它提供了巨大的节省,因为您将外部 JavaScript 的请求数量降至最低,这意味着您的脚本可以立即运行,并且您的 DOM 就绪事件会更快地触发。

由您来确保这是安全的,并且您的代码仅针对它应该影响的站点部分。通常,您可以通过按 ID 选择特定元素并确保您的 ID 不会在页面之间共享,并且您不会将具有特殊含义的类应用于不应该具有它们的元素来执行此操作。

有没有办法确保只加载特定视图所需的 CoffeeScripts 而不是全部?

不,如果没有为每个页面创建单独的清单文件,这会破坏使用资产管道的主要目的之一。不要这样做。将整个缩小的 JavaScript 包文件包含在每个页面上是正确的、理想的和有意的。

于 2012-09-21T02:04:00.080 回答