功能累加的时候,js 也一点点累加。 刚开始 jquery 不小了,加了个 jquery-ui,自己写的 js 量不大;
然后富文本加了 kindeditor,图表加了 high chart;然后 jq-upload;bootstrap 等
按照默认方式最简单可以在 application.js 里面 require a,require b
问题这样打包出来最后的 js 会很大,而大部分页面是不需要 kindeditor/high chart 这些大库的。
大家一般是怎么处理的。
http://guides.rubyonrails.org/asset_pipeline.html#controller-specific-assets
You can also opt to include controller specific stylesheets and JavaScript files only in their respective controllers using the following: <%= javascript_include_tag params[:controller] %> or <%= stylesheet_link_tag params[:controller] %>. Ensure that you are not using the require_tree directive though, as this will result in your assets being included more than once.
#1 楼 @blacktulip 你不觉得根本没解决问题 吗,只是合并成一个请求了,没按按需加载来
lz 推荐你看看 RequireJS, 或国产的 seajs
#3 楼 @blacktulip 一样的有问题,就比如 jquery 也不是每个 controller 都要,但一般会包在 application 中
你可以看下这个链接 http://ruby-china.org/wiki 的源码里的 js 包含
requirejs
require(['jquery'], function($) {
// code
});
assets_pipeline
//= require 'jquery'
// code
我不明白有什么不同。
随便搜个例,比如
//init.js
$("#J_PicCover").click(function(){
require.async('module/highlight', function(){
$(".buy-info").highlight({color:'#ffe5c4',speed:500,complete:function(){
},iterator:'sinusoidal'});
});
});
这东东就做这用,有人用得好,http://www.angularjs.cn/
在 application.js 中不加载全部的 js
//= require_directory .
加载 js
<%= javascript_include_tag "application" %>
<%= yield :js %>
在需要的页面再加载
<%= content_for :js do %>
<%= javascript_include_tag "site/wice_grid" %>
<% end %>