JavaScript性能優化

1、使用局部變量   

    在函數中,總是使用var來定義變量。無論何時使用var都會在當前的範圍類創建一個局部變量。如果不使用var來定義變量,那麼變量會被創建在window範圍內,那麼每次使用這個變量的時候,解釋程序都會搜索整個範圍樹。同時全局變量要在頁面從瀏覽器中卸載後才銷燬,而局部變量在函數執行完畢即可銷燬,過多的全局變量增加了不必要的內存消耗。只要有可能就應該用局部變量或者數字索引的數組來替代命名特性。如果命名特性要多次使用,就先將它的值存儲在局部變量中,以避免多次使用線性算法請求命名特性的值。

2、優化if語句

    使用if語句和多個else語句時,一定要把最有可能的情況放在第一個,然後是第二可能出現的情況,如此排列,這樣就減少了要進行多次測試才能遇到正確條件的情況。同時也要儘量減少else if語句的數量,並且將條件按照二叉樹的方式進行排列。

3、switch和if

    一般來說超過兩種情況時,最好使用switch語句。常用switch來代替if語句,最高可令執行快10倍。在javascript中就更加可以從中獲益,因爲case語句可以使用任何類型的值。

4、避免字符串拼接   

    一旦要使用多個字符串的連接(如大於五個或以上),最好使用如下方式:

    var buf = new Array();  

    for(var i = 0; i < 100; i++){   

        buf.push(i.toString());  

    }   

    var all = buf.join("");

5、儘可能不要使用eval   

    使用eval相當於在運行時再次調用解釋引擎對內容進行運行,需要消耗大量時間。

6、避免對象的嵌套查詢

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

7、類型轉換

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

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

8、數組遍歷

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

9、創建對象

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

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

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