亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

深入理解Javascript中的循環優化

2019-11-20 21:45:02
字體:
來源:轉載
供稿:網友
循環是大多數編程語言都具備的基本功能,JS也不例外,不同之處在于JS是解釋型語言,運行于瀏覽器環境中,客戶端的軟硬件條件會對JS執行效率產生很大的影響。然而客戶端環境對于開發者是未知、多樣的,并且難以改變,所以優化代碼質量是提高代碼效率的主要途徑。
JS代碼中,循環是比較容易導致性能問題的因素。理解循環特性進而有針對性地進行優化也許會帶來不錯的性能提升。
for、while、do-while循環:
這三種循環本身的循環效率相差不多,所以只要根據適合的應用場景選擇即可。
以for循環為例:
復制代碼 代碼如下:

var aValues = ["a", "b", "c", "d"];
for(var i = 0; i < aValues.length; i += 1){
 fDoSomethingA(aValues[i]);
 fDoSomethingA(aValues[i]);
}

上面例子中每次循環都要比較i與數組的長度,所以每次都要重新讀取數組長度,由如果數組長度在循環中是不變的,這樣做就沒有必要,我們可以使用局部變量代替length的讀取。同理,例子中,aValues[i]由于被讀取兩次以上,我們也可以將它賦值給局部變量:
復制代碼 代碼如下:

var aValues = ["a", "b", "c", "d"], nLength = aValues.length;
 for(var i = 0, sValue; i < nLength; i += 1){
 sValue = aValues[i];
 fDoSomethingA(sValue);
 fDoSomethingB(sValue);
 }

如果循環的業務邏輯對循環順序不敏感,可以嘗試倒序循環,即將計數器遞減到0。
復制代碼 代碼如下:

var aValues = ["a", "b", "c", "d"], nLength = aValues.length;
 for(var i = nLength, sValue; i -= 1;){
 sValue = aValues[i];
 fDoSomethingA(sValue);
 fDoSomethingB(sValue);
 }

使用這種方式計數器默認與0進行比較,連局部變量比較都省略了,理論上也能提高效率。
for-in循環:
for-in循環更像在窮舉,他用來遍歷對象屬性,我們知道對象屬性的查找會一直延續到原型鏈頂端,這將大大降低循環效率。for-in循環的寫法上沒有什么優化空間,需要在使用時遵循一定原則:盡量只在遍歷數據型對象的時候才使用for-in循環。
如果遍歷對象的屬性是明確的,可以使用數組循環替代。
例如遍歷一個聯系人對象:
復制代碼 代碼如下:

var aContact = ["N", "FN", "EMAIL;PREF", ...];
 for(var i = aContact.length; i -= 1;){
 fDoSomething(aContact[i]);
 }
 

Duff策略
Duff策略的主要原理是通過展開循環減少次數來提高效率。例如
一個普通循環:
復制代碼 代碼如下:

for(var i = aValues.length; i -= 1){
 fDoSomething(aValues[i]);
 }
 

如果aValues.length == N,寫成以下這種方式的效率將比循壞來的高:
復制代碼 代碼如下:

fDoSomething(aValues[0]);
 fDoSomething(aValues[1]);
 fDoSomething(aValues[2]);
 fDoSomething(aValues[3]);
 ...
 ...
 fDoSomething(aValues[N-1]);

但如果N很大,這種寫法就不現實,而Duff策略是一種適中的循環展開策略。
近日在網易郵箱通訊錄聯系人的初始化循環中加入了Duff策略:
復制代碼 代碼如下:

var nLength = aContacts.length,
// 總輪數
 nRounds = Math.floor( nLength / 8),
// 額外余量
 nLeft = nLength % 8,
i = 0;
// 先處理余量
 if(nLeft){
 do{
 fFormat(aContacts[i ++]);
 }while(-- nLeft)
}
// 每輪執行8次格式化
 if(nRounds){
 do{
 fFormat(aContacts[i ++]);
 fFormat(aContacts[i ++]);
 fFormat(aContacts[i ++]);
 fFormat(aContacts[i ++]);
 fFormat(aContacts[i ++]);
 fFormat(aContacts[i ++]);
 fFormat(aContacts[i ++]);
 fFormat(aContacts[i ++]);
 }while(-- nRounds)
 }

如上所示,每輪循環可以執行8個聯系人數據的格式化操作,還有一輪循環用于處理余下的聯系人。由此可見,在聯系人較多的情況下總的循環次數大大降低,可以降低循環的消耗。另外,8是Duff策略提出的最優值。
實際測試時發現在IE下可以帶來10-20%以上的性能提升,而非IE瀏覽器中幾乎看不到區別。
結束語:在測試過程中發現非IE瀏覽器下,優化后和優化前的效率差距并不是很大,甚至可以忽略,這說明這些瀏覽器的JS引擎對
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美高清在线观看| 久久亚洲国产精品| 亚洲综合av影视| 久久久亚洲精品视频| 欧美久久久精品| 夜夜躁日日躁狠狠久久88av| 亚洲人成在线观看网站高清| 日韩麻豆第一页| 欧美一级淫片播放口| 欧洲午夜精品久久久| 日韩精品亚洲元码| 久久精品91久久久久久再现| 欧美成aaa人片免费看| 亚洲精品720p| 久热爱精品视频线路一| 欧美视频在线观看 亚洲欧| 亚洲欧美日韩天堂一区二区| 亚洲国内精品在线| 欧美日韩精品在线观看| 欧美香蕉大胸在线视频观看| 成人免费高清完整版在线观看| 亚洲精品第一国产综合精品| 欧美性猛交xxxx乱大交| 亚洲第一福利网| 国产婷婷97碰碰久久人人蜜臀| 日韩高清av在线| 欧美日韩一区二区免费在线观看| 久久久www成人免费精品张筱雨| 91精品美女在线| 久久久久久亚洲精品中文字幕| 欧美亚洲国产另类| 日韩视频在线免费观看| 国产精品久久精品| 亚洲精品色婷婷福利天堂| 国产69精品99久久久久久宅男| 上原亚衣av一区二区三区| 国产一区二区视频在线观看| 国产精品免费视频久久久| 久久国产精品久久久久久久久久| 中文字幕视频在线免费欧美日韩综合在线看| 91亚洲精品久久久| 日韩在线视频免费观看| 2020国产精品视频| 国产亚洲精品va在线观看| 亚洲欧美中文日韩在线| 欧美视频一区二区三区…| 性色av一区二区三区红粉影视| 一区二区福利视频| 日韩欧美中文字幕在线播放| 国产suv精品一区二区| 精品调教chinesegay| 亚洲国产欧美一区| 亚洲国产中文字幕在线观看| 97在线视频国产| 国产成人涩涩涩视频在线观看| 92版电视剧仙鹤神针在线观看| 欧美日韩精品在线视频| 成人精品久久一区二区三区| 亚洲一区国产精品| 亚洲激情成人网| 午夜免费在线观看精品视频| 中日韩美女免费视频网站在线观看| 欧美精品久久一区二区| 日产精品久久久一区二区福利| 久久亚洲私人国产精品va| 日韩中文在线中文网三级| 欧美夫妻性视频| 欧美巨猛xxxx猛交黑人97人| 欧美国产日韩视频| 91日本在线视频| 久久天堂av综合合色| 国产精品视频区| 亚洲国产精品一区二区三区| 亚洲欧美日韩爽爽影院| 亚洲香蕉成人av网站在线观看| 国产精品美女免费| 亚洲成人av中文字幕| 欧美性xxxxxxx| 欧美孕妇与黑人孕交| 日韩av观看网址| 在线播放国产一区中文字幕剧情欧美| 日韩美女av在线免费观看| 777午夜精品福利在线观看| 欧美激情精品久久久久| 国产午夜精品一区二区三区| 国产日韩在线一区| www.亚洲一区| 欧美激情图片区| 亚洲精品久久久久久下一站| 久久国产加勒比精品无码| 国产激情久久久| 欧美黄色片免费观看| 国产精品久久久久久久av电影| 亚洲欧美日韩网| 国产欧美精品一区二区| x99av成人免费| 亚洲欧美日韩天堂| 另类天堂视频在线观看| 欧美电影在线免费观看网站| 美乳少妇欧美精品| 黑人巨大精品欧美一区二区三区| 日韩在线观看免费全集电视剧网站| 久久好看免费视频| 日韩av电影国产| 欧美日韩亚洲视频一区| 久久久91精品国产一区不卡| 另类少妇人与禽zozz0性伦| 欧洲精品久久久| 中文字幕亚洲一区在线观看| 成人免费午夜电影| 国产69久久精品成人看| 亚洲在线免费看| 在线播放亚洲激情| 国产91av在线| 亚洲免费精彩视频| 中文字幕在线精品| 国产日本欧美一区二区三区| 国产精品日韩一区| 欧美极品xxxx| 亚洲激情在线观看视频免费| 日韩国产精品视频| 国产成人久久精品| 国产精品久久久久久久一区探花| 96精品视频在线| 久久色精品视频| 黄色成人av网| 在线播放精品一区二区三区| 亚洲午夜精品视频| 欧美日韩免费区域视频在线观看| 成人网在线免费看| …久久精品99久久香蕉国产| 亚洲国产欧美精品| 青青久久av北条麻妃海外网| 日韩av在线免费播放| 这里只有精品在线播放| 国产亚洲精品日韩| 国产欧美日韩精品在线观看| 欧美猛少妇色xxxxx| 97视频免费在线看| 欧美性猛交xxxx免费看久久久| 国产一区二区三区免费视频| 日韩在线国产精品| 日韩国产激情在线| 欧美激情精品久久久久久免费印度| 亚洲va欧美va国产综合久久| 亚洲在线观看视频网站| 最近2019年中文视频免费在线观看| 欧美激情小视频| 中文字幕久热精品在线视频| 色樱桃影院亚洲精品影院| 久久久精品久久| 韩国美女主播一区| 亚洲精品乱码久久久久久金桔影视| www.欧美视频| 成人午夜高潮视频| 国产在线观看精品一区二区三区| 日韩中文视频免费在线观看| 91香蕉国产在线观看| 色偷偷88888欧美精品久久久| 亚洲精品一区中文| 日韩免费看的电影电视剧大全| 国产精品久久电影观看| 黄网动漫久久久| 91av在线视频观看|