優(yōu)化javascript的執(zhí)行效率一些方法總結
更新時間:2013年12月25日 15:04:52 作者:
本文為大家介紹下優(yōu)化javascript的執(zhí)行效率一些方法,個人感覺還不錯,感興趣的朋友可以了解下
1、在低版本瀏覽器中(如IE6,IE7等)串聯(lián)字符串時使用數(shù)組的join方法就比使用+號來連接高效很多(如['aaa','bbb','ccc'].join()比'aaa'+'bbb'+'ccc'高效);
2、Array:
pop比shift高效,push比unshift高效。這對于設計二叉堆結構比較重要,將最大或者最小的元素放在數(shù)組末尾最好。
3、數(shù)字取整最好用移位操作:
1.1 >> 0;
4、使用直接量創(chuàng)建Array和Object:
var a = [];
var o = {};
5、對象層次不要嵌套太多,減少對象的查找:
不要用a.b.c.d.e,這種設計方式獲取e對象。
6、鍵值對應取值,與switch case的比較,鍵值對應,比switch case高效,各個瀏覽器均測試過,可以看看 關于這個比較的文章javascript小實驗;
7、如果你使用jq的話,還有一個$('xxxx').empty().append('xxxxxxx');和$('xxxxx').html('xxxxx');的比較,結果是$('xxxx').empty().append('xxxxxxx');勝出,文章地址是jQuery小實驗;
8、循環(huán)
在JavaScript中,我們可以使用for(;;),while(),for(in)三種循環(huán),這三種循環(huán)中for(in)的效率極差,因為他需要查詢散列鍵,只要可以就應該盡量少用。for(;;)和while循環(huán)的性能應該說基本(平時使用時)等價。
如果是循環(huán)變量遞增或遞減,不要單獨對循環(huán)變量賦值,應該在它最后一次讀取的時候使用嵌套的++或—操作符。
如果要與數(shù)組的長度作比較,應該事先把數(shù)組的length屬性放入一個局部變量中,減少查詢次數(shù)。
9、局部變量和全局變量
局部變量的速度要比全局變量的訪問速度更快,因為全局變量其實是全局對象的成員,而局部變量是放在函數(shù)的棧當中的。
10、不使用Eval
使用eval相當于在運行時再次調用解釋引擎對內容進行運行,需要消耗大量時間。這時候使用JavaScript所支持的閉包可以實現(xiàn)函數(shù)模版(關于閉包的內容請參考函數(shù)式編程的有關內容);
11、字符串連接
如果是追加字符串,最好使用s+=anotherStr操作,而不是要使用s=s+anotherStr;
12、把數(shù)字轉換成字符串,應用"" + 1,雖然看起來比較丑一點,但事實上這個效率是最高的,性能上來說:
("" +) > String() > .toString() > new String()
這條其實和下面的“直接量”有點類似,盡量使用編譯時就能使用的內部操作要比運行時使用的用戶操作要快。
String()屬于內部函數(shù),所以速度很快,而.toString()要查詢原型中的函數(shù),所以速度遜色一些,new String()用于返回一個精確的副本;
13、浮點數(shù)轉換成整型,這個更容易出錯,很多人喜歡使用parseInt(),其實parseInt()是用于將字符串轉換成數(shù)字,而不是浮點數(shù)和整型之間的轉換,我們應該使用Math.floor()或者Math.round()。
14、字符串遍歷操作
對字符串進行循環(huán)操作,譬如替換、查找,應使用正則表達式,因為本身JavaScript的循環(huán)速度就比較慢,而正則表達式的操作是用C寫成的語言的API,性能很好;
15、定時器
如果針對的是不斷運行的代碼,不應該使用setTimeout,而應該是用setInterval。setTimeout每次要重新設置一個定時器;
更新中……,敬請期待!
2、Array:
pop比shift高效,push比unshift高效。這對于設計二叉堆結構比較重要,將最大或者最小的元素放在數(shù)組末尾最好。
3、數(shù)字取整最好用移位操作:
1.1 >> 0;
4、使用直接量創(chuàng)建Array和Object:
var a = [];
var o = {};
5、對象層次不要嵌套太多,減少對象的查找:
不要用a.b.c.d.e,這種設計方式獲取e對象。
6、鍵值對應取值,與switch case的比較,鍵值對應,比switch case高效,各個瀏覽器均測試過,可以看看 關于這個比較的文章javascript小實驗;
7、如果你使用jq的話,還有一個$('xxxx').empty().append('xxxxxxx');和$('xxxxx').html('xxxxx');的比較,結果是$('xxxx').empty().append('xxxxxxx');勝出,文章地址是jQuery小實驗;
8、循環(huán)
在JavaScript中,我們可以使用for(;;),while(),for(in)三種循環(huán),這三種循環(huán)中for(in)的效率極差,因為他需要查詢散列鍵,只要可以就應該盡量少用。for(;;)和while循環(huán)的性能應該說基本(平時使用時)等價。
如果是循環(huán)變量遞增或遞減,不要單獨對循環(huán)變量賦值,應該在它最后一次讀取的時候使用嵌套的++或—操作符。
如果要與數(shù)組的長度作比較,應該事先把數(shù)組的length屬性放入一個局部變量中,減少查詢次數(shù)。
9、局部變量和全局變量
局部變量的速度要比全局變量的訪問速度更快,因為全局變量其實是全局對象的成員,而局部變量是放在函數(shù)的棧當中的。
10、不使用Eval
使用eval相當于在運行時再次調用解釋引擎對內容進行運行,需要消耗大量時間。這時候使用JavaScript所支持的閉包可以實現(xiàn)函數(shù)模版(關于閉包的內容請參考函數(shù)式編程的有關內容);
11、字符串連接
如果是追加字符串,最好使用s+=anotherStr操作,而不是要使用s=s+anotherStr;
12、把數(shù)字轉換成字符串,應用"" + 1,雖然看起來比較丑一點,但事實上這個效率是最高的,性能上來說:
("" +) > String() > .toString() > new String()
這條其實和下面的“直接量”有點類似,盡量使用編譯時就能使用的內部操作要比運行時使用的用戶操作要快。
String()屬于內部函數(shù),所以速度很快,而.toString()要查詢原型中的函數(shù),所以速度遜色一些,new String()用于返回一個精確的副本;
13、浮點數(shù)轉換成整型,這個更容易出錯,很多人喜歡使用parseInt(),其實parseInt()是用于將字符串轉換成數(shù)字,而不是浮點數(shù)和整型之間的轉換,我們應該使用Math.floor()或者Math.round()。
14、字符串遍歷操作
對字符串進行循環(huán)操作,譬如替換、查找,應使用正則表達式,因為本身JavaScript的循環(huán)速度就比較慢,而正則表達式的操作是用C寫成的語言的API,性能很好;
15、定時器
如果針對的是不斷運行的代碼,不應該使用setTimeout,而應該是用setInterval。setTimeout每次要重新設置一個定時器;
更新中……,敬請期待!
相關文章
詳解extract-text-webpack-plugin 的使用及安裝
這篇文章主要介紹了詳解extract-text-webpack-plugin 的使用及安裝,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06獲取div編輯框,textarea,input text的光標位置 兼容IE,F(xiàn)F和Chrome的方法介紹
獲取div編輯框,textarea,input text的光標位置 兼容IE,F(xiàn)F和Chrome的方法介紹,有需求的朋友可以參考2012-11-11在for循環(huán)中l(wèi)ength值是否需要緩存
這篇文章主要介紹了在for循環(huán)中l(wèi)ength值是否需要緩存,需要的朋友可以參考下2015-07-07js實現(xiàn)鍵盤上下左右鍵選擇文字并顯示在文本框的方法
這篇文章主要介紹了js實現(xiàn)鍵盤上下左右鍵選擇文字并顯示在文本框的方法,涉及javascript操作鍵盤事件及文本框的相關技巧,非常簡單實用,需要的朋友可以參考下2015-05-05