Duff’s Device
达夫设备(Duff's device)是一种将循环展开执行,从而提高执行效率的一种技术方法。
function Duff(arr, callback) {
// 一次循环体中执行 8 次,降低循环次数
const step = 8;
// 降低 8 倍后,还需要执行的次数
let count = Math.floor(arr.length / step);
// 获取余数
let startAt = count % step;
let i = 0;
while (startAt > 0) {
callback(i++);
startAt--;
}
while (count > 0) {
callback(i++);
callback(i++);
callback(i++);
callback(i++);
callback(i++);
callback(i++);
callback(i++);
callback(i++);
count--;
}
}
实测
当量级上去后,确实能够大幅度减少损耗。
const list = [];
let i = 100000000;
while (i > 0) {
list.push(i);
i--;
}
console.time('test1');
for (let i = 0; i < list.length; i++) {
}
console.timeEnd('test1');
console.time('test2');
Duff(list, (i) => {});
console.timeEnd('test2');
// test1: 102.68408203125 ms
// test2: 21.979248046875 ms