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對象,由於建立時時間和空間的開銷都比較大,所以應該儘可能考慮採用緩存。

相關文章
相關標籤/搜索