Javascript效能分析——迴圈遍曆

來源:互聯網
上載者:User

Javascript定義了4種迴圈,分別是for,while,do-while及for-in。前三種迴圈的效能相差不大,但是for-in迴圈效能非常差,它在每次迴圈執行時,需要遍曆對象中的所有屬性包括從原型鏈繼承而來的,至於它的效能到底有多少糟糕以下是Chrome18下的測試(用YUI Profiler做分析工具,如果不會用它可見我之前寫的 Javascript效能分析——工具(YUI Profiler)上)http://www.bkjia.com/kf/201204/126311.html :
//數組長度
var loopCount = 20000000;

//準備測試數組
var mockAry = new Array();
for (var i = 0 ; i < loopCount; i++){
    mockAry.push(i);
}

//for迴圈
function testForAry(){
    for (var i = 0 ; i < loopCount; i++){
        var value = mockAry[i];
    }
}

//while迴圈
function testWhileAry(){
    var i = 0;
    while(i < loopCount){
        var value = mockAry[i];
        i++;
    }
}

//do-while迴圈
function testDoWhileAry(){
    var i = 0;
    do{
        var value = mockAry[i];
        i++;
    }while(i < loopCount);
}

//for-in迴圈
function testForInAry(){
    for (var item in mockAry){
        var value = item;
    }
}

//註冊待測試方法
YAHOO.tool.Profiler.registerFunction("testForAry", window);
YAHOO.tool.Profiler.registerFunction("testWhileAry", window);
YAHOO.tool.Profiler.registerFunction("testDoWhileAry", window);
YAHOO.tool.Profiler.registerFunction("testForInAry", window);

//每個測試方法被測試幾次
var testCount = 10;

for(var i =0; i < testCount ;i++){
    testForAry();
    testWhileAry();
    testDoWhileAry();
    testForInAry();
}

//產生測試報告
var report1 = YAHOO.tool.Profiler.getFunctionReport("testForAry");
var report2 = YAHOO.tool.Profiler.getFunctionReport("testWhileAry");
var report3 = YAHOO.tool.Profiler.getFunctionReport("testDoWhileAry");
var report4 = YAHOO.tool.Profiler.getFunctionReport("testForInAry");

console.log(report1);
console.log(report2);
console.log(report3);
console.log(report4);

測試結果:
  
 
可見,do-while比for和while慢些,但是這幾乎可以忽略,而for-in卻真的很糟糕,慢了100倍左右。在實際的工作中很少會遇到測試時這種瘋狂的迴圈,但還是需要注意儘可能少用for-in迴圈,不過當遍曆一個對象(而非一個簡單的數組)中的屬性時,for-in迴圈就是一個很好的幫手,在《高效能JavaScript》中還介紹了許多提高迴圈遍曆的技巧,以後做詳細介紹。

 

摘自  Miser
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.