JS优化循环之展开循环

617 阅读1分钟

当循环次数是确定的,消除循环并使用多次函数调用往往更快

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左右,时间减少了将近一半多

参考 《Javascript高级程序设计》(第3版) P691