YUI Compressor 壓縮 JavaScript 的內(nèi)容包括:
- 移除注釋
- 移除額外的空格
- 細微優(yōu)化
- 標識符替換(Identifier Replacement)
YUI Compressor 包括哪些細微優(yōu)化呢?
- object["property"] ,如果屬性名是合法的 JavaScript 標識符(注:合法的 JavaScript 標識符——由一個字母開頭,其后選擇性地加上一個或者多個字母、數(shù)字或下劃線)且不是保留字,將優(yōu)化為: object.property
- {"property":123} ,如果屬性名是合法的 JavaScript 標識符且不是保留字,將優(yōu)化為 {property:123} (注:在對象字面量中,如果屬性名是一個合法的 JavaScript 標識符且不是保留字,并不強制要求用引號引住屬性名)。
- 'abcd\'efgh',將優(yōu)化為 "abcd'efgh"。
- "abcd" + "efgh",如果是字符串相連接,將優(yōu)化成 "abcdefgh"(注:所有在使用 YUI Compressor 的前提下,對于腳本中的字符串連接,使用連接符 “+” 的效率和可維護性最高)。
對于 JavaScript 最有效的壓縮優(yōu)化,當屬標識符替換。
比如:
(function(){ function add(num1, num2) { return num1 + num2; } })();
進行屬標識符替換后:
(function(){ function A(C, B) { return C+ B; } })();
再移除額外的空格,最終成了:
(function(){function A(C,B){return C+B;}})();
YUI Compressor 標識符替換僅替換函數(shù)名和變量名,那哪些不能被替代呢?
- 原始值:字符串、布爾值、數(shù)字、null 和 undefined。一般來說字符串占的空間最多,而非數(shù)字字面量其次(true、false,null,underfinded)。
- 全局變量:window、document、XMLHttpRequest等等。使用最多的就是 document、window。
- 屬性名,比如:foo.bar。占據(jù)的空間僅次于字符串,”.” 操作符無法被代替,且 a.b.c 更加費空間。
- 關(guān)鍵字。經(jīng)常被過度使用的關(guān)鍵字有:var、return。最好的優(yōu)化方法:一個函數(shù)僅出現(xiàn)一次 var 和 return 關(guān)鍵字。
對于原始值、全局變量、屬性名的優(yōu)化處理方式大致相同:任何字面量值、全局變量或者屬性名被使用超過 2 次(包括2次),都應(yīng)該用局部變量存儲代替。
但有部分情況下是禁止使用標識符替換的:
- 使用 eval() 函數(shù)。解決方法:不使用或者創(chuàng)建一個全局函數(shù)封裝 eval()。
- 使用 with 語句。解決方法:方法同上。
- JScript 的條件注釋。唯一解決的方法:不使用。
由于 YUI Compressor 是建立在 rhino interpreter 基礎(chǔ)上的,所以上述所有的優(yōu)化都是安全的。
擴展閱讀: 《Extreme JavaScript Compression With YUI Compressor》
原文: http://www.planabc.net/2009/08/02/javascript-compression_with_yui_compressor/
本文鏈接:http://www.95time.cn/tech/web/2009/6923.asp
出處:藍色理想
責任編輯:bluehearts
◎進入論壇網(wǎng)頁制作、WEB標準化版塊參加討論,我還想發(fā)表評論。
|