快速举例,
制作一个新的rails项目,如果我们查看app/assets/javascripts/application.js
它说,
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
默认。
我在foo.js, bar.js
app/assets/javascripts/
如果我运行应用程序,这个资产管道
在每页foo.js, bar.js
even i don't need to use in most of the pages.
这是一个正确的结构吗?
怎么样?
更改为require_self
并使用javascript_include_tag
并在需要时手动加载js文件?
这不是更好的方法吗?
为什么Rails资产管道默认策略总是加载每个js文件,即使我不需要?
答案 0 :(得分:0)
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
注意最后一个require_tree .
,这意味着,app / javsacript文件夹中当前存在的javascript文件将自动加载。
所以,在回答你的第一个问题时,是的,这是一个正确的结构。 javascript文件夹中的Js文件将自动加载。
您已将js文件保存在js文件夹中,这意味着您将在项目中使用它:)
生产中: 当您在生产机器中预编译资产时,您的所有js,css将被预编译为单个application.css& application.js文件,所以我们不需要费心去手动加载每个文件。
答案 1 :(得分:0)
浏览器通常会缓存资产文件。
因此,当用户第一次访问应用程序时,将一个巨大的资产文件传递给浏览器可能是有意义的。以下所有请求(即使是其他页面)都会更快,因为浏览器不必重新加载其他小资源。
但这取决于:如果您的应用程序中很少使用大型javascript库,那么最好只在特殊页面上提供这些文件。
答案 2 :(得分:0)
我知道这是一个老问题,但这个答案可以帮助某人。
如果您需要在特定位置添加资产,则需要将其添加到预编译阵列。在Rails 3中,您需要通过以这种方式添加资产来修改config/application.rb
文件:
config.assets.precompile += %w( foo.js bar.js )
在Rails 4和5中,您需要以这种方式修改config/initializers/assets.rb
文件:
Rails.application.config.assets.precompile += %w( foo.js bar.js )
不要忘记重启服务器。
This文章是了解Asset Pipeline的绝佳资源。