Application.js超过1 Mb的rails

时间:2015-05-06 10:36:20

标签: javascript ruby-on-rails ruby asset-pipeline

我有一个rails应用程序,资产编译后inputvar = input().strip() 占用的空间超过1 MB。这会减慢我整个网站的速度。

我使用Apache,Rails 4,jQuery,相当繁重的JavaScript和AJAX。如果有人能指出我正确的方向,我将非常感激。

2 个答案:

答案 0 :(得分:5)

这在您的特定情况下可能不可行,但肯定帮助我防止Application.js膨胀。

我确定你知道,Application.js将所有指定的文件(默认情况下都是这些文件)编译成一个.js文件,该文件在每个页面中作为布局的一部分加载(默认情况下) 。通常,这会导致在每个页面中加载完全不必要的自定义脚本,并减慢整个应用程序的速度。我个人认为这种行为不受欢迎。我发现我的网站的工作原理只包括我在Application.js中的“核心”javascript组件(jquery,bootstrap的js库,以及任何与layout.html.erb本身相关的脚本),并在需要的页面中指定其余部分。他们。例如:

的application.js

请注意,它不包含require tree .。这很重要,因为这是指定包含整个assets / javascripts文件夹的行。在这种情况下,“模板”是定义的.js文件,它与layout.html.erb

有关
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require bootstrap-sprockets
//= require template
//= require turbolinks

layout.html.erb

以下是我的布局的最后一部分,紧接在关闭正文标记之前。这会在每个页面上加载application.js,然后加载视图中指定的任何j。

<%= 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 %>

初始化/ assets.rb

最后,确保您的脚本仍在进行预编译,即使它们不是Application.js的一部分。

Rails.application.config.assets.precompile += %w( pages/profile.js )

...或者,更有效地假设您有许多带有自己脚本的页面......

Rails.application.config.assets.precompile += %w( pages/* )

结论

我发现这种技术确实有助于保持Application.js的大小,并且通常可以提供良好的实践。我希望你觉得它很有用,如果它与你的问题无关,就道歉。

答案 1 :(得分:1)

你有没有想过使用CDN托管的jQuery版本?你能提供未编译的application.js。

您还可以尝试使用browserifyrequire.js

相关问题