Rails资产管道政策

时间:2015-01-28 09:21:07

标签: javascript ruby-on-rails ruby

快速举例,

制作一个新的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文件,即使我不需要?

3 个答案:

答案 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的绝佳资源。