San*_*eep 0 javascript ruby ruby-on-rails asset-pipeline
我有一个Rails应用程序,application.js资产编译后需要超过1 MB。这使我的整个网站变慢。
我使用Apache,Rails 4,jQuery,相当繁重的JavaScript和AJAX。如果有人能指出正确的方向,我将不胜感激。
在您的特定情况下这可能不可行,但可以肯定地帮助我避免了Application.js的膨胀。
就像您确定的那样,Application.js将所有指定的文件(默认情况下,所有文件)编译为一个.js文件,该文件(同样,默认情况下)作为每个页面布局的一部分加载。通常,这会导致在每个页面中加载完全不必要的自定义脚本,并减慢整个应用程序的速度。我个人认为此行为不受欢迎。我发现适用于我网站的内容仅包含Application.js中的“核心” javascript组件(jquery,bootstrap的js库以及与layout.html.erb本身有关的任何脚本),并在需要的页面中指定其余部分他们。例如:
请注意,它不包含require tree .。这很重要,因为这是指定包括整个资产/ javascripts文件夹的行。在这种情况下,“模板”是与布局.html.erb有关的已定义的.js文件
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require bootstrap-sprockets
//= require template
//= require turbolinks
Run Code Online (Sandbox Code Playgroud)
以下是我的布局的最后部分,紧接在结束body标签之前。这将在每个页面上加载application.js,然后加载视图中指定的所有js。
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<% if content_for?(:javascript) %>
<%= yield :javascript%>
<% end %>
Run Code Online (Sandbox Code Playgroud)
在需要页面特定javascript的任何视图中,都可以使用Rails javascript帮助器指定文件。
<% content_for :javascript do %>
<%= javascript_include_tag 'pages/profile', 'data-turbolinks-track' => true %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
最后,即使您的脚本不是Application.js的一部分,也请确保它们仍在进行预编译。
Rails.application.config.assets.precompile += %w( pages/profile.js )
Run Code Online (Sandbox Code Playgroud)
...或者更有效地假设您有许多带有自己脚本的页面...
Rails.application.config.assets.precompile += %w( pages/* )
Run Code Online (Sandbox Code Playgroud)
我发现该技术确实有助于减小Application.js的大小,并且通常可以作为良好的实践。希望它对您有所帮助,对于与您的问题无关的内容,我们深表歉意。
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |