JavaScript 达夫设备

298 阅读1分钟

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