JS性能優化

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

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.[頂]對字符串進行循環操作,例如替換、查找,就使用正則表達式。因爲JS的循環速度比較慢,而正則表達式的操作是用C寫成的API,性能比較好。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章