JS優化迴圈之展開迴圈

深藍一人發表於2018-01-11

當迴圈次數是確定的,消除迴圈並使用多次函式呼叫往往更快

let arr = new Array(99999999);
function loop1 () {
    console.time('timer');
    let j = 0;
    for (let i = 0; i < arr.length; i++) {
        j = j + 1;
    }
    console.timeEnd('timer');
}

// 一次迴圈執行8次函式,迴圈次數約為原來的 1/8
function loop2 () {
    console.time('timer');
    let j = 0;
    let iter = Math.ceil(arr.length / 8);
    let startChar = arr.length % 8
    do {
    switch (startChar) {
        case 0: j = j + 1; 
        case 7: j = j + 1; 
        case 6: j = j + 1;  
        case 5: j = j + 1;      
        case 4: j = j + 1;      
        case 3: j = j + 1;      
        case 2: j = j + 1;      
        case 1: j = j + 1;           
    }
 	startChar = 0;
    } while (--iter > 0)
    console.timeEnd('timer');
}

複製程式碼

執行幾次loop1()loop2(),發現loop1()執行時間為100ms左右,而優化之後loop2()執行時間位40ms左右,時間減少了將近一半多

JS優化迴圈之展開迴圈

參考 《Javascript高階程式設計》(第3版) P691

相關文章