問候欄杆和Javascript大師!Rails Javascript壓縮/對respond_to javascript響應的縮小?
我有一個項目,我在
respond_to do |format|
format.js
end
塊返回一個大的JavaScript文件。
我想弄清楚如何縮小或壓縮.js響應,因爲.js.erb視圖充滿了評論,並根據控制器的結果大小不同。
任何人有任何想法?
問候欄杆和Javascript大師!Rails Javascript壓縮/對respond_to javascript響應的縮小?
我有一個項目,我在
respond_to do |format|
format.js
end
塊返回一個大的JavaScript文件。
我想弄清楚如何縮小或壓縮.js響應,因爲.js.erb視圖充滿了評論,並根據控制器的結果大小不同。
任何人有任何想法?
好吧,也許我有一個解決辦法:
respond_to do |format|
format.js { self.response_body = minify(render_to_string) }
end
這完美的作品。當然,關鍵是方法minify方法。你會發現很多JS縮小器。例如,你可以使用這個(如果許可證允許的話):http://github.com/thumblemonks/smurf/raw/master/lib/smurf/javascript.rb - 它基於Crockford的jsmin.c。
如果你把這個文件到您的lib,需要它,你的縮小方法可以是這樣的:
def minify(content)
min = Smurf::Javascript.new(content)
min.minified
end
希望它能幫助你。
如果你打算自動縮小,那麼你可能應該去找一塊中間件。令人驚訝的是我找不到任何東西(有很多針對CSS/JS,但它是關於靜態資產而不是動態內容),但編寫它並不是一個這樣的問題。
鋼軌3使用內置Uglifier法(資產管道默認)
見拉狄克的代碼上方和正交換這
def minify(content)
Uglifier.new.compile(content)
end
對於軌道4:
render js: Uglifier.new.compile(render_to_string)
感謝pawien!這給了我肯定的想法。 :)將結果傳遞給塊並用縮小器處理它似乎是一個很好的解決方案。然後我只需要弄清楚如何緩存輸出。我會在今天和明天玩這個遊戲..我可能會誤導你。 :D – 2010-09-29 16:11:52
有沒有什麼辦法在Rails3.2中做到這一點,只使用自己的資產管道內置功能? – 2012-06-28 11:23:34
謝謝radek!好的解決方案納扎爾,添加我的軌道3修改位下面 – djburdick 2013-05-05 18:39:32