道非道 非常道

          勤思、謹言、慎行、厚積、薄發(fā)

          統(tǒng)計

          web

          天圓

          經(jīng)濟 政治 軍事

          鍵康

          js 代碼壓縮

          JS 代碼壓縮,基本原理為:
             1.壓縮多余的空格和換行符。
             2.刪除注釋,因為注釋只對程序員有用而對于瀏覽網(wǎng)頁的最終用戶是無用的,刪除可以減少文件體積。
             3.把較長的變量名稱和過程名稱統(tǒng)一替換為很短的名稱,一者可以減少體積,二者還可以減少程序的可讀性,保護代碼產(chǎn)權(quán).

          JS 的速度分為兩種,下載速度和執(zhí)行速度。要想JS的下載速度快,就需要盡量減少js文件的大小,另外,把多個js文件合并成一個也能因為減少服務(wù)器的響應(yīng)次數(shù)而加快網(wǎng)頁下載。



          YUI Compressor 壓縮 JavaScript 的內(nèi)容包括:

          1. 移除注釋
          2. 移除額外的空格
          3. 細微優(yōu)化
          4. 標識符替換(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ù)名和變量名,那哪些不能被替代呢?

          1. 原始值:字符串、布爾值、數(shù)字、null 和 undefined。一般來說字符串占的空間最多,而非數(shù)字字面量其次(true、false,null,underfinded)。
          2. 全局變量:window、document、XMLHttpRequest等等。使用最多的就是 document、window。
          3. 屬性名,比如:foo.bar。占據(jù)的空間僅次于字符串,”.” 操作符無法被代替,且 a.b.c 更加費空間。
          4. 關(guān)鍵字。經(jīng)常被過度使用的關(guān)鍵字有:var、return。最好的優(yōu)化方法:一個函數(shù)僅出現(xiàn)一次 var 和 return 關(guān)鍵字。

          對于原始值、全局變量、屬性名的優(yōu)化處理方式大致相同:任何字面量值、全局變量或者屬性名被使用超過 2 次(包括2次),都應(yīng)該用局部變量存儲代替。

          但有部分情況下是禁止使用標識符替換的:

          1. 使用 eval() 函數(shù)。解決方法:不使用或者創(chuàng)建一個全局函數(shù)封裝 eval()。
          2. 使用 with 語句。解決方法:方法同上。
          3. JScript 的條件注釋。唯一解決的方法:不使用。

          posted on 2009-08-25 17:49 星期五 閱讀(666) 評論(0)  編輯  收藏 所屬分類: web 2.0

          主站蜘蛛池模板: 金秀| 阿拉尔市| 潜山县| 怀宁县| 贡觉县| 大安市| 潞西市| 昌邑市| 册亨县| 冀州市| 平乡县| 北川| 临城县| 汝城县| 西安市| 磐石市| 华安县| 瓦房店市| 甘南县| 徐汇区| 桐城市| 鹿泉市| 民和| 龙胜| 阳信县| 鱼台县| 梁平县| 临沂市| 应用必备| 绥中县| 开远市| 如东县| 黄龙县| 嘉善县| 谢通门县| 邳州市| 垫江县| 宁南县| 台中县| 绥芬河市| 安阳市|