1.關於JS的迴圈,迴圈是一種常用的流程式控制制。JS提供了三種迴圈:for(;;)、while()、for(in)。
在這三種迴圈中 for(in)的效率最差,因為它需要查詢Hash鍵,因此應盡量少用for(in)迴圈,for(;;)、while()迴圈的效能基本持平。
當然,推薦使用for迴圈,如果迴圈變數遞增或遞減,不要單獨對迴圈變數賦值,而應該使用嵌套的++或--運算子。
2.如果需要遍曆數組,應該先緩衝數組長度,將數組長度放入局部變數中,避免多次查詢數組長度。
3.局部變數的訪問速度要比全域變數的訪問速度更快,因為全域變數其實是window對象的成員,而局部變數是放在函數的棧裡的。
4.盡量少使用eval,每次使用eval需要消耗大量時間,這時候使用JS所支援的閉包可以實現函數模板。
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.對字串進行迴圈操作,例如替換、尋找,就使用Regex。因為JS的迴圈速度比較慢,而Regex的操作是用C寫成的API,效能比較好。
12.對於大的JS對象,因為建立時時間和空間的開銷都比較大,因此應該盡量考慮採用緩衝。