美文网首页Web前端之路让前端飞
JavaScript 迭代优化(Duff's Devic

JavaScript 迭代优化(Duff's Devic

作者: 白色鹈鹕鸟 | 来源:发表于2017-09-14 10:36 被阅读104次

众所周知,过多的循环会带来一定的性能开销,增加总体运行时间。而减少迭代次数能够优化性能。"Duff's Device" 作为广为人知的一种限制循环迭代次数的模式,还是有必要了解的。

Duff's Device 原本是 C 语言中的实现方式,不过由 Jeff Greenberg 移植到 JavaScript 中,下面是一个典型的实现:

var iterations = Math.floor(items.length / 8),
      startAt = items.length % 8,
      i = 0;

do {
  switch (startAt) {
    case 0: process(items[i++]);
    case 7: process(items[i++]);
    case 6: process(items[i++]);
    case 5: process(items[i++]);
    case 4: process(items[i++]);
    case 3: process(items[i++]);
    case 2: process(items[i++]);
    case 1: process(items[i++]);
  }
  startAt = 0;
} while (--iterations);

代码的思路是非常的清晰的,那就是每次循环都执行八次函数,这样很明显会减少迭代的次数。不过,只有在迭代次数比较多时,才能够有明显的效率提升。

此算法稍快的版本取消了 switch 语句,而且余数处理和主循环分开:

var i = items.length % 8;
while(i) {
  process(items[i--]);
}

i = Math.floor(items.length / 8);

while(i) {
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
}

其实整个实现的过程并不复杂,不过为什么 Duff's Device 每次迭代都是执行 8 次函数?

相关文章

  • JavaScript 迭代优化(Duff's Devic

    众所周知,过多的循环会带来一定的性能开销,增加总体运行时间。而减少迭代次数能够优化性能。"Duff's Devic...

  • Duff's Device

    所谓的Duff's Device其实只是一种代码的特殊写法,他将switch和do...while结合起来使得算法...

  • 【转】JavaScript遍历、枚举、迭代

    原文链接:JavaScript骚操作之遍历、枚举与迭代(上篇)JavaScript骚操作之遍历、枚举与迭代(下篇)...

  • 性能优化

    内容优化 服务器优化 Cookie优化 CSS优化 javascript优化 图像优化

  • JavaScript迭代

    遍历对象 方法1 方法2 遍历数组 方法1 方法2 方法3 map数组 filter数组 reduce数组 找到某...

  • 优化迭代

    好的稿子都是改出来的,初稿写好后一定要耐下心来修改。有时候改稿的时间要比写稿的时间更长。 一步步去检查磨稿的四部曲...

  • 明日

    关注首发并测试 4.1.0迭代 4月迭代 会员活动及会员观看逻辑优化需求文档 直播间优化需求文档

  • 达夫设备(Duff's device)

    若干年前在校园招聘的时候,做到了这样一道笔试题, 当时一头雾水,并没有做出来: 问题: 下面这段代码的作用是什么?...

  • Javascript 迭代器是什么

    Javascript 迭代器是什么 JavaScript迭代器是在ES6中引入的,用于循环一系列值,通常是某种集合...

  • typescript 学习笔记

    一些概念知识点 javascript设计之初,存在缺陷 javascript的更新迭代时间轴 javascript...

网友评论

    本文标题:JavaScript 迭代优化(Duff's Devic

    本文链接:https://www.haomeiwen.com/subject/ccbrsxtx.html