原文出自:http://www.cnblogs.com/heimirror/archive/2010/06/04/1751304.html,謝謝!!
這兩天想用pack後的javascript為朋友們整理出用於搶購的程式,於是想弄一個跟jQuery min包一樣的pack方法,加快載入時間,當然主要是好奇。在上網轉了一圈,全都是一模一樣的抄襲文章,也分不出來哪個是原創,以後搜尋引擎得有搜原創的能力,不然原作者太受打擊了。
對於該問題還真沒有合適的答案,給的連結是死鏈,國外的網站也都是無關痛癢的描述。從CSDN上下了一堆工具,沒一個好使的。當然,最終我還是弄明白了,具體如下。
Javascript是指令碼語言,如果弄的離譜,會讓解譯器認不出來,所以不論是加密還是壓縮還是混淆,最後的結果還要讓解析器理解。總結起來,原始的Javascript有如下變換,
- 加密:微軟有一個控制項,可以將javascript加密,加密後真的是一點都無法閱讀,在啟動並執行時候需要再用這個控制項解密。加解密的過程是可逆的,所以有些基礎的人還是可以破解的。此外,這個控制項在瀏覽器裡運行時會報安全警告,而且只適用於IE,所以用處不大。
- 加殼:有些工具可以將js檔案打包成exe,在運行時類似於以cscript/wscript運行,這樣的方法是在網頁裡行不通的。
- 去冗:將javascript中的注釋、換行、沒用的Null 字元都去掉,這樣的做法沒什麼技術含量,如果沒注釋,用編輯器就可以做。
- 重整:利用javascript的eval函數以及Regex將源檔案重整,這個過程也是可逆的,重整後的檔案只能對付菜鳥,而且會影響載入效率。
- 壓縮:這個是重點了,大家看一下jQuery的min包,主體部分除了經過去冗處理,函數內部的變數也被替換了,這樣可以在不考慮閱讀的情況下,最大程度減少檔案長度。這個過程也是很有技術含量的,因為不能修改全域變數,否則壓縮後的檔案可能無法使用。具體實現方法在網上似乎傳了很多,其實目前只有一個,就是 yuicompressor,我特意在jQuery的SVN上看了一下,在build目錄裡可以找到這個包,目前的版本是2.4.2。
所以,如果你想要壓縮javascript,或跟我一樣只是好奇的話,可以弄一個yuicompressor來玩玩,我特意用jQuery.js試了一下,處理過的檔案和jQuery.min.js一模一樣。