Application.js 超过 1 Mb rails
Application.js more than 1 Mb rails
我有一个 rails 应用程序,资产编译后的 application.js
占用超过 1 MB。这正在减慢我的整个网站。
我使用 Apache,Rails 4,jQuery,相当重 JavaScript 和 AJAX。如果有人能指出我正确的方向,我将不胜感激。
这在您的特定情况下可能不可行,但确实帮助我避免了 Application.js 腹胀。
我相信你知道,Application.js 将所有指定的文件(默认情况下,所有文件)编译成一个 .js 文件,该文件作为你的一部分加载(同样,默认情况下)每个页面的布局。通常这会导致在每个页面中加载完全不必要的自定义脚本,并减慢整个应用程序的速度。我个人认为这种行为不可取。我发现适用于我的网站的内容仅包括 Application.js 中的 "core" javascript 组件(jquery、bootstrap 的 js 库,以及任何相关的脚本layout.html.erb 本身),并在需要它们的页面中指定其余部分。例如:
application.js
请注意,它不包括 require tree .
。这很重要,因为这是指定包含整个 assets/javascripts 文件夹的行。 "Template" 在这种情况下是定义的 .js 文件,属于 layout.html.erb
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require bootstrap-sprockets
//= require template
//= require turbolinks
layout.html.erb
以下是我布局的最后,紧接在结束正文标记之前。这会在每个页面上加载 application.js,然后加载视图中指定的任何 js。
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<% if content_for?(:javascript) %>
<%= yield :javascript%>
<% end %>
视图
在任何需要页面特定 javascript 的视图中,您可以使用 Rails javascript 帮助程序
指定文件
<% content_for :javascript do %>
<%= javascript_include_tag 'pages/profile', 'data-turbolinks-track' => true %>
<% end %>
initializers/assets.rb
最后,确保您的脚本仍在预编译中,即使它们不是 Application.js 的一部分。
Rails.application.config.assets.precompile += %w( pages/profile.js )
...或者,更有效地假设您有许多页面都有自己的脚本...
Rails.application.config.assets.precompile += %w( pages/* )
总结
我发现这种技术确实有助于减小 Application.js 的大小,并且总体上是一种很好的实践。我希望你觉得它有用,如果它与你的问题无关,我深表歉意。
有没有想过使用CDN托管的jQuery版本?你能提供你未编译的 application.js.
您也可以尝试使用 browserify or require.js
我有一个 rails 应用程序,资产编译后的 application.js
占用超过 1 MB。这正在减慢我的整个网站。
我使用 Apache,Rails 4,jQuery,相当重 JavaScript 和 AJAX。如果有人能指出我正确的方向,我将不胜感激。
这在您的特定情况下可能不可行,但确实帮助我避免了 Application.js 腹胀。
我相信你知道,Application.js 将所有指定的文件(默认情况下,所有文件)编译成一个 .js 文件,该文件作为你的一部分加载(同样,默认情况下)每个页面的布局。通常这会导致在每个页面中加载完全不必要的自定义脚本,并减慢整个应用程序的速度。我个人认为这种行为不可取。我发现适用于我的网站的内容仅包括 Application.js 中的 "core" javascript 组件(jquery、bootstrap 的 js 库,以及任何相关的脚本layout.html.erb 本身),并在需要它们的页面中指定其余部分。例如:
application.js
请注意,它不包括 require tree .
。这很重要,因为这是指定包含整个 assets/javascripts 文件夹的行。 "Template" 在这种情况下是定义的 .js 文件,属于 layout.html.erb
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require bootstrap-sprockets
//= require template
//= require turbolinks
layout.html.erb
以下是我布局的最后,紧接在结束正文标记之前。这会在每个页面上加载 application.js,然后加载视图中指定的任何 js。
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<% if content_for?(:javascript) %>
<%= yield :javascript%>
<% end %>
视图
在任何需要页面特定 javascript 的视图中,您可以使用 Rails javascript 帮助程序
指定文件<% content_for :javascript do %>
<%= javascript_include_tag 'pages/profile', 'data-turbolinks-track' => true %>
<% end %>
initializers/assets.rb
最后,确保您的脚本仍在预编译中,即使它们不是 Application.js 的一部分。
Rails.application.config.assets.precompile += %w( pages/profile.js )
...或者,更有效地假设您有许多页面都有自己的脚本...
Rails.application.config.assets.precompile += %w( pages/* )
总结
我发现这种技术确实有助于减小 Application.js 的大小,并且总体上是一种很好的实践。我希望你觉得它有用,如果它与你的问题无关,我深表歉意。
有没有想过使用CDN托管的jQuery版本?你能提供你未编译的 application.js.
您也可以尝试使用 browserify or require.js