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對象,因爲創建時時間和空間的開銷都比較大,因此應該儘量考慮採用緩存。