由于刚学rails,试着作了一个小系统操做微信公共账号,javascript
以后部署的时候碰见了一个问题,整套系统在互联网端访问,很是的慢,而在手机端访问,10s后才会有响应,html
打开chrome的调试工具,发现application-(xxxxdigestxxxxxx).js 这个文件有800多kjava
以后打开这个文件发现,里面包含有未压缩的jquery 注释版,以及重控件 ckeditor 的代码node
因而,问题变成了jquery
1. 如何将jquery 脱水压缩chrome
2. 只在须要时候再加载其余重控件 好比 ckeditor 的js (500k)ruby
关于1, 实际上是本身犯的一个错误, 由于我在预编译的时候没有带上production的参数 正确的编译指令是微信
rake assets:precompile RAILS_ENV=productionapp
至于为何最开始没有这么写? 由于最开始我仍是加了这个参数的,可是发现加了的时候终端"卡死"了,因而ctrl+c 中止了执行ide
后来发现,其实并非卡死,而是一些重控件的js比较复杂,node.js 还在运算而已,好比ckeditor 在个人本子上,最后执行precompile须要大概3min的时间
关于2,咱们都知道application.js 是layouts/application.html.erb 里引用的,以后application.js 默认包含了一句话
//=require tree . 这句话的含义是加目录下全部的js文件
若是咱们要作到分别加载js,首先要干掉这句话
以后须要在layouts/application.html.erb 里的header预留一个yield位置加载本身在具体指定页面的js
我是在<%= csrf_meta_tags %> 后面加了个<%= yield :head %>
以后再具体的页面上加载具体的js就简单了,在指定的页面中加载对应的js便可 好比这里
<% content_for :head do%>
<%= javascript_include_tag "ckeditor_load", "data-turbolinks-track" => true %>
<% end %>
固然,你须要在app/assets/javascripts 里写入这个ckeditor_load.js 文件,以后还须要注意的是,须要在config/application.rb 中加入这个precompile 的编译范围
config.assets.precompile += ['admin.js', 'ckeditor_load.js', 'swfObject.js']
最后再rake assets:precompile RAILS_ENV=production
这样,最终可达到js分类进行加载,而且压缩了js,删除了注释等信息,application.js 从最开始的800k,最后到了通常页面的120k左右,比较科学
参考文章
http://guides.rubyonrails.org/asset_pipeline.html
http://chloerei.com/2013/03/10/rails-assets-pipeline-s-value/
这里说个小花絮,我在rei 的博客留言以后,rei几乎就当即回复了,后来以为博主这个头像好面熟,最后想起来了,这家伙是ruby-china 的第一位会员(http://ruby-china.org/rei),顿时吓尿.