JavaScript項目最佳化總結(1)

來源:互聯網
上載者:User

前端時間對公司已有項目JavaScript代碼進行最佳化,本文的是對最佳化工作的一個總結,拿出來與大家分享。當然我的最佳化方式可能並不是最優的,或者說有些不對的地方,請指教。

JavaScript最佳化總結分為以下幾點

最佳化前後對比

模組化類編程):代碼清晰、有效防止變數汙染問題、代碼重用方便擴充等;

JavaScript壓縮混淆:減少size最佳化載入時間,混淆保護代碼;

JavaScript檔案合并:減少http請求最佳化網路耗時提升效能;產生文檔:方便公用庫的使用,尋找介面方便。

模組化類編程)

對於靜態類來說JavaScript實現比較簡單,使用Object直接量就已經夠用了;但是要建立執行個體化、可繼承經典的類需要做一番工作。因為JavaScript是基於原型的prototype-based)程式設計語言,並沒有包含內建類的實現它沒有存取控制符,它沒有定義類的關鍵字class,它沒有支援繼承的extend或冒號,它也沒有用來支援虛函數的virtual等),但是我們通過JavaScript可以輕易地類比出經典的類。

靜態類

根據寶寶JS公用介面的特性,它們不需要執行個體化,所以最佳化使用了該方式。下面以PetConfigParser為例介紹下實現方式:

 
  1. var PetConfigParser;  
  2. if (!PetConfigParser) {  
  3.     PetConfigParser = {};  
  4. }  
  5. (function () {  
  6.     //private 變數、函數  
  7.     /**  
  8.      * 寶寶所有配置字典,以cate * 10000 + (lvl - 1) * 10 + dex - 1】為key  
  9.      * @attribute    petDic  
  10.      * @type {Object}  
  11.      * @private  
  12.      */ 
  13.     var petDic = null;  //寶寶字典  
  14.     /**  
  15.      * 根據__pet_config構建一個Object字典,以cate、dex、lvl組合作為key  
  16.      * @method buildPetDic  
  17.      * @private  
  18.      * @return {void}  
  19.      */ 
  20.     function buildPetDic() {  
  21.         petDic = new Object();  
  22.         for (var item in __pet_config) {  
  23.             var lvl = parseInt(__pet_config[item]['lvl']);  
  24.             var dex = parseInt(__pet_config[item]['dex']);  
  25.             var cate = parseInt(__pet_config[item]['cate']);  
  26.             var key = cate * 10000 + (lvl - 1) * 10 + dex;  
  27.             petDic[key] = __pet_config[item];  
  28.         }  
  29.     }  
  30.     //public 介面  
  31.     /**  
  32.      * 根據寶寶id,讀取__pet_config中對應寶寶的資訊  
  33.      * @method getPetById  
  34.      * @param   {String/int} petId 寶寶id  
  35.      * @return  {Object} pet 寶寶的所有靜態資訊,如{id:"300003289", lvl:"1", dex:"2", price:"200", life:"2592000", cate:"3", name:"飛天小使等級1熟練2", intro:"", skill:"護身符", skill1_prob:"30", skill2_prob:"0"}  
  36.      */ 
  37.     if (typeof PetConfigParser.getPetById !== 'function') {  
  38.         PetConfigParser.getPetById = function (petId) {  
  39.             var pet = ("undefined" == typeof (__pet_config)) ? null : __pet_config["pet_" + petId];  
  40.             return pet;  
  41.         }  
  42. }  
  43. })();  

這種方式利用了JavaScript匿名函數來建立私人範圍,這些私人範圍只能在內部訪問。總結上述過程分為以下幾個步驟:

定義一個全域的變數var PetConfigParser),注意變數首字母大寫與普通變數區別;

然後建立一個匿名函數並運行 (function () {/*xxxx*/ })(); ),在匿名函數內部建立局部變數和函數,它們只能在當前範圍中被訪問到;

全域變數var PetConfigParser)可以在任何地方訪問到,在匿名函數內部操作PetConfigParser添加靜態函數。

使用執行個體:

 
  1. $(function () {  
  2.         DialogManager.init();  
  3.         $('#showDialog').click(function () {  
  4.             DialogManager.show("#msgBoxTest", "#closeId");  
  5.             return false;  
  6.         });  
  7.         $('#cofirmBtn').click(function () {  
  8.             DialogManager.hide();  
  9.             return false;  
  10.         });  
  11. }) 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.