當迴圈次數是確定的,消除迴圈並使用多次函式呼叫往往更快
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