Ruby on rails 3.2 我如何确保我的咖啡脚本只加载到他们需要的页面上?

Ruby on rails 3.2 我如何确保我的咖啡脚本只加载到他们需要的页面上?,ruby-on-rails-3.2,asset-pipeline,Ruby On Rails 3.2,Asset Pipeline,关于Rails 3.2中的资产管道,我不了解的一点是,我看到了对application.js文件的多个引用,其中包含以下行: //= require_tree . 这会在每个页面上加载我的所有Java脚本吗?因为实际上,我不想在用户处于“类别”页面时(例如)将“产品”咖啡脚本加载到浏览器中,因为这些代码都不会被使用 如果我上面提到的行为准确描述了require\u tree在资产管道中的工作方式,那么有没有办法确保只加载特定视图所需的咖啡脚本,而不是全部 这会在每个页面上加载我的所有Java脚

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

//= require_tree .
这会在每个页面上加载我的所有Java脚本吗?因为实际上,我不想在用户处于“类别”页面时(例如)将“产品”咖啡脚本加载到浏览器中,因为这些代码都不会被使用

如果我上面提到的行为准确描述了
require\u tree
在资产管道中的工作方式,那么有没有办法确保只加载特定视图所需的咖啡脚本,而不是全部

这会在每个页面上加载我的所有Java脚本吗

是的,它就是这样做的。Rails将把您的咖啡脚本编译成JavaScripts,然后(在生产中)将它们连接并缩小为一个文件。该文件将包含在每一页中

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

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

。。。因为这些代码都不会被使用

如果没有从缓存中执行和加载额外的代码,那么在每个页面上包含额外的代码几乎没有成本。同时,它提供了巨大的节约,因为您正在最小化对外部JavaScript的请求数量,这意味着您的脚本可以立即运行,并且您的DOM就绪事件可以更快地触发

由您来确保这是安全的,并且您的代码只针对站点中应该受到影响的部分。通常,您可以通过按ID选择特定的元素来实现这一点,并确保您的ID不会在页面之间共享,并且您不会将具有特殊意义的类应用于不应该有它们的元素

有没有办法确保只加载特定视图所需的咖啡脚本,而不是全部加载

不,除非为每个页面创建单独的清单文件,否则会破坏使用资产管道的主要目的之一。不要这样做。在每个页面上都包含整个缩小的JavaScript包文件是正确的、期望的和有意的

这会在每个页面上加载我的所有Java脚本吗

是的,它就是这样做的。Rails将把您的咖啡脚本编译成JavaScripts,然后(在生产中)将它们连接并缩小为一个文件。该文件将包含在每一页中

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

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

。。。因为这些代码都不会被使用

如果没有从缓存中执行和加载额外的代码,那么在每个页面上包含额外的代码几乎没有成本。同时,它提供了巨大的节约,因为您正在最小化对外部JavaScript的请求数量,这意味着您的脚本可以立即运行,并且您的DOM就绪事件可以更快地触发

由您来确保这是安全的,并且您的代码只针对站点中应该受到影响的部分。通常,您可以通过按ID选择特定的元素来实现这一点,并确保您的ID不会在页面之间共享,并且您不会将具有特殊意义的类应用于不应该有它们的元素

有没有办法确保只加载特定视图所需的咖啡脚本,而不是全部加载


不,除非为每个页面创建单独的清单文件,否则会破坏使用资产管道的主要目的之一。不要这样做。在每个页面上都包含您的整个精简JavaScript捆绑包文件是正确的、期望的和有意的。

这现在非常有意义。这样,它只需要加载一次。它还将有助于在不同的视图上强制实施HTML元素的命名实践,这是我的疏忽,也是导致错误的原因。谢谢现在这很有道理。这样,它只需要加载一次。它还将有助于在不同的视图上强制实施HTML元素的命名实践,这是我的疏忽,也是导致错误的原因。谢谢