由於剛學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),頓時嚇尿.