現在的Web項目總是離不開大量JavaScript,而JS檔案的體積也越來越大,也越來越影響頁面的感知效能(Perceived Performance)。因此,我們會對JS檔案進行壓縮,一方面是使用Gzip,而另一方面則是去除JS檔案裡的注釋、空白,並且壓縮局部變數長度等等。對於一些成熟的類庫來說,它們本身都會提供“完整注釋”以及“強烈壓縮”兩個版本。但是,有時候我們需要自己修複類庫裡的bug,這隻能在注釋版中修改,對於壓縮版自然就無能為力了。此外,自訂的指令檔一般也值得一壓。因此我在項目中時常會備一個指令碼壓縮公用程式。
壓縮指令碼的工具有很多,
例如老牌的JSMin,或是YUI Compressor(下稱YC),它們都可以用來壓縮指令檔(後者還可以處理CSS)。不過在新項目中,我使用了新的工具:Google Closure Compiler(下稱GC)。GC有多種用法,例如網頁版,網路API版,還有獨立應用程式版。GC與YC不同的是,YC是一個壓縮器(Compressor),而GC更是一個編譯器(Compiler),也就是說GC的壓縮並不僅僅是去除注釋和空白,還可以在保證代碼正確性的情況下進一步地改寫成更省空間的做法,一個位元組算一個位元組,例如:
a = new Object => a = {}a = new Array => a = []if (a) b() => a && b()return 2 * 3; => return 6;
Google Closure Compiler 提供三種壓縮方法,分別是空格移除、簡單壓縮及進階壓縮。簡單壓縮基本上只是把comments 和空格拿走(跟YUI Compressor 基本一樣);進階壓縮除以上功能外,還能夠rename variable name、甚至重寫某些statement!很好很強大!
Google JavaScript Closure Compiler 有本地和線上版本:
三種javascript壓縮公用程式
1.JSMin
2.YUI Compressor
3.Google Closure Compiler
:http://code.google.com/p/closure-compiler/downloads/list