龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

JavaScript项目优化总结(1)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
前端时间对公司已有项目JavaScript代码进行优化,本文的是对优化工作的一个总结,拿出来与大家分享。当然我的优化方式可能并不是最优的,或者说有些不对的地方,请指教。 JavaScr

前端时间对公司已有项目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. }) 

精彩图集

赞助商链接