2010年4月27日 星期二

JavaScript代碼優化

 轉貼自:http://www.wxwdesign.cn/article/skills/javascript_code_optimization.htm

高級程序設計提供的發布JavaScript代碼時的優化建議,總結一下:



一、字節數優化

1. 刪除註釋(版權及法律聲明部分應保留)

2. 刪除製表符和空格

3. 刪除所有換行

4. 替換變量名

示 例:
function show(name,age){alert(name+","+age);}

優化:
function s(n,a){alert(n+","+a);}

5. 其它減少字節數的方法

5.1 替換布爾值  用0和1替代false和true

5.2 縮短否定     用!a代替a!=b

5.3 使用字面量  用[]代替new Array(),用{}代替new Object()

不過以上優化都可以通過軟件實現,目前很有多壓縮工具。


二、執行效率優化

根 據測試數據:Javascript比編譯型的C慢5000倍,比解釋型的Java慢100倍,比解釋型的Perl慢10倍。

1. 關注範圍(儘可能減少函數的多級調用)

示例:
function a(){}
function b(){a();}
function c(){b();}
c();   //增加了函數引用的複雜性,同時也影響執行效率

2. 儘可能使用局部變量

3. 避免with語句

4. 選擇正確的算法

5. 反轉循環

示 例:
for(var i=0;i<inputs.length;i++){ }

優化:
for(var i=inputs.length;i>=0;i--){}   //緩存了inputs.length數據

for(var i=0,len=inputs.length;i<len;i++){}  //這樣也是可以的

6. 翻轉循環

示例:
var i=0; while(i<inputs.length){ ... i++;}

優化:
var i=0; do{... i++;}while(i<inputs.length);

再次優化:
var i=inputs.length-1; do{...}while(--i>=0);

7. 展開循環

示 例:
var a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sum=0;
for(var i=0,len=a.length;i<len;i++){sum+=a[i];}

優化:
var a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sum=0;
for(var i=0,len=a.length;i<len;i++){
sum+=a[i++];
sum+=a[i++];
sum+=a[i++];
sum+=a[i++];
}   //這樣只需要循環3次,比上面的for少了12次循環

8. 優化if()

示 例:
if(a){}else if(b){}else if(c){}else{}  //其中c的可能性最大

優化:
if(c){}else if(a){}else if(b){}else{}  //把可能性最大的放前面,以減少判斷次數

9. 避免使用+連接字符(IE6和IE7效率比較低),用Array.join()替代

10. 優先使用內置方法

比如:Math.power(a,b); //計算a的b次冪,內置方法效率要高一些

11.  存儲常用值

示 例代碼:
var a=document.getElementsByTagName("input");
var len=a.length;   //多次使用時,把a.length存儲到變量len裡

12. 一行定義多個變量

示例代碼:
var a,b,c,d=0,s="",arr=[],obj={};

13. 插入迭代子

示例代碼:
sum+=a[i];
i++;

優化:
sum+=a[i++];

14. 使用對象字面量

示例:
var tom=new Object();
tom.name="tom";
tom.age=16;

優化:
var tom={name:"tom",age:16};

15. 節約使用DOM(避免頻繁更改DOM樹)

使用文檔片段 (document.createDocumentFragment())緩存過程中的DOM元素。

沒有留言:

張貼留言

Related Posts with Thumbnails