js性能優化技巧

下面是一些關於客戶端JS性能的一些優化的小技巧:

 

1. 關於JS的循環,循環是一種常用的流程控制。JS提供瞭三種循環:for(;;)、while()、for(in)。在這三種循環中 for(in)的效率最差,因為它需要查詢Hash鍵,因此應盡量少用for(in)循環,for(;;)、while()循環的性能基本持平。當然,推薦使用for循環,如果循環變量遞增或遞減,不要單獨對循環變量賦值,而應該使用嵌套的++或–運算符。

 

2. 如果需要遍歷數組,應該先緩存數組長度var len=arr.length; for(i=0;i<len;i++),將數組長度放入局部變量中,避免多次查詢數組長度。

 

3. 局部變量的訪問速度要比全局變量的訪問速度更快,因為全局變量其實是window對象的成員,而局部變量是放在函數的棧裡的。

 

4. 盡量少使用eval,每次使用eval需要消耗大量時間,特別是在循環內,json[i][變量]=1;這樣的語句可以不使用eval。

 

5. 盡量避免對象的嵌套查詢,對於obj1.obj2.obj3.obj4這個語句,需要進行至少3次查詢操作,先檢查obj1中是否包含 obj2,再檢查obj2中是否包含obj3,然後檢查obj3中是否包含obj4…這不是一個好策略。應該盡量利用局部變量,將obj4以局部變量 保存,從而避免嵌套查詢。

 

6. 使運算符時,盡量使用+=,-=、*=、\=等運算符號,而不是直接進行賦值運算。

 

7. 當需要將數字轉換成字符時,采用如下方式:"" + 1。從性能上來看,將數字轉換成字符時,有如下公式:("" +) > String() > .toString() > new String()。String()屬於內部函數,所以速度很快。而.toString()要查詢原型中的函數,所以速度遜色一些,new String()需要重新創建一個字符串對象,速度最慢。

 

8. 當需要將浮點數轉換成整型時,應該使用Math.floor()或者Math.round()。而不是使用parseInt(),該方法用於將字符串轉換成數字。而且Math是內部對象,所以Math.floor()其實並沒有多少查詢方法和調用時間,速度是最快的。

 

9.盡量作用JSON格式來創建對象,而不是var obj=new Object()方法。因為前者是直接復制,而後者需要調用構造器,因而前者的性能更好。

 

10.當需要使用數組時,也盡量使用JSON格式的語法,即直接使用如下語法定義數組:[parrm,param,param…],而不是采用 new Array(parrm,param,param…)這種語法。因為使用JSON格式的語法是引擎直接解釋的。而後者則需要調用Array的構造器。

 

11. 對字符串進行循環操作,例如替換、查找,就使用正則表達式。因為JS的循環速度比較慢,而正則表達式的操作是用C寫成的API,性能比較好。

 

最後有一個基本原則,對於大的JS對象,因為創建時時間和空間的開銷都比較大,因此應該盡量考慮采用緩存。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *