据我了解,所有的JavaScript被合并到1文件。 当Rails添加//= require_tree .时,Rails会默认执行此操作//= require_tree . 到你的application.js清单文件的底部。 这听起来像是一个真正的生活节省,但我有点关注页面特定的JavaScript代码。 此代码是否在每个页面上执行? 我想要的最后一件事就是当我们只需要在1页上的时候就为每个页面实例化所有的对象。 另外,是不是也有冲突的代码的可能性? 或者你在页面的底部放一个小script标签,只是调用一个方法来执行页面的JavaScript代码? 那么你不再需要require.js了吗? 谢谢 编辑 :我欣赏所有的答案…我不认为他们真的在解决问题。 其中一些是关于样式,似乎不涉及…和其他人只是提到javascript_include_tag …我知道存在(显然…),但似乎Rails 3.1前进的方式是包装所有的Javascript到1个文件中,而不是在每个页面的底部加载单个的Javascript。 我能想出的最好的解决方案是用id或ES class div标签包装某些功能。 在javascript代码中,您只需检查页面上是否存在id或class ,如果是,则运行与之关联的javascript代码。 这样,如果动态元素不在页面上,JavaScript代码不会运行 – 即使它包含在由Sprockets打包的大量application.js文件中。 我的上述解决方案具有如下优点:如果在100个页面中的8个页面上包含搜索框,则它将仅在这8个页面上运行。 您也不必在网站上的8页上包含相同的代码。 事实上,您再也不必在网站上包含手动脚本标记。 我认为这是我的问题的实际答案。
由rails new安装的默认Rails应用程序在生产中有config.assets.compile = false 。 做事情的一般方法是运行rake assets:precompile在部署应用程序之前进行rake assets:precompile ,以确保编译所有资产管道资产。 那么,如果我在生产中设置config.assets.compile = true ,会发生什么? 我不会'需要再运行precompile 。 我相信会发生的第一次资产被请求,它将被编译。 这将是第一次的性能打击(这意味着你通常需要在生产中的js运行时才能做到这一点)。 但除了这些缺点之外,在资产被懒散地编译之后,我认为随后对该资产的所有访问将不会有性能影响,应用程序的性能将与预编译资源完全相同 。 这是真的? 有什么我失踪? 任何其他原因,不要在生产中设置config.assets.compile = true ? 如果在生产环境中有一个JS运行库,并且愿意为了首次访问资产而牺牲性能下降的precompile ,那么为了不必运行precompile ,这是否有意义呢?