rails 裏js 在production 只合並不壓縮等問題,以及assets pipeline 加載js 在指定頁面上

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

相關文章
相關標籤/搜索