我有一个rails应用程序,资产编译后inputvar = input().strip()
占用的空间超过1 MB。这会减慢我整个网站的速度。
我使用Apache,Rails 4,jQuery,相当繁重的JavaScript和AJAX。如果有人能指出我正确的方向,我将非常感激。
答案 0 :(得分:5)
这在您的特定情况下可能不可行,但肯定帮助我防止Application.js膨胀。
我确定你知道,Application.js将所有指定的文件(默认情况下都是这些文件)编译成一个.js文件,该文件在每个页面中作为布局的一部分加载(默认情况下) 。通常,这会导致在每个页面中加载完全不必要的自定义脚本,并减慢整个应用程序的速度。我个人认为这种行为不受欢迎。我发现我的网站的工作原理只包括我在Application.js中的“核心”javascript组件(jquery,bootstrap的js库,以及任何与layout.html.erb本身相关的脚本),并在需要的页面中指定其余部分。他们。例如:
请注意,它不包含require tree .
。这很重要,因为这是指定包含整个assets / javascripts文件夹的行。在这种情况下,“模板”是定义的.js文件,它与layout.html.erb
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require bootstrap-sprockets
//= require template
//= require turbolinks
以下是我的布局的最后一部分,紧接在关闭正文标记之前。这会在每个页面上加载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 %>
最后,确保您的脚本仍在进行预编译,即使它们不是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。
您还可以尝试使用browserify或require.js