【问题标题】:Application.js more than 1 Mb railsApplication.js 超过 1 Mb 的轨道
【发布时间】:2015-05-06 10:36:19
【问题描述】:

我有一个 Rails 应用程序,资产编译后的 application.js 占用超过 1 MB。这减慢了我的整个网站。

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

【问题讨论】:

  • 感谢 Akarienta 的编辑。

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


【解决方案1】:

这在您的特定情况下可能不可行,但确实帮助我防止 Application.js 臃肿。

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

application.js

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

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

layout.html.erb

以下是我的布局的最后,紧挨在结束 body 标记之前。这会在每个页面上加载 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 %>

初始化程序/assets.rb

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

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

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

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

结论

我发现这种技术确实有助于减小 Application.js 的大小,并且总体上是一种良好的实践。我希望你觉得它有用,如果它与你的问题无关,请道歉。

【讨论】:

  • 您好康纳,非常感谢您如此详尽的回复。您的建议可能与我的情况非常相关。我会根据您的建议优化我的 application.js 文件。
【解决方案2】:

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

您也可以尝试使用browserifyrequire.js

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多