javascript - 在循环之前定义数组的长度是一种好习惯吗?

标签 javascript arrays performance loops

<分区>

我在 Ember.js 中看到了这个片段:

  for (var i=0, l=deps.length; i<l; i++) {
    if (deps[i] === 'exports') {
      reified.push(exports = {});
    } else {
      reified.push(requireModule(resolve(deps[i])));
    }
  }

请看var i=0, l=deps.length; i<l; i++ , deps 的长度在循环之前定义。我想知道为什么他们必须这样做而不是只使用 var i=0; i<deps.length; i++ .我认为这可能是一个“性能技巧”,所以我决定在 jsperf 上进行测试:

http://jsperf.com/predefined-length-vs-inline-defined-length

结果显示第二个更快。所以他们使用第一个肯定有另一个原因。

有人知道吗?非常感谢。

最佳答案

这与其说是一个小的性能优化,不如说是一个好的做法。在非常大的阵列中,它将产生显着的性能改进。这样做的原因是它“缓存”了数组、NodeList 等的长度值,这样在你循环的退出条件下你不必每次都重新访问该属性,因为它存储在变量内部.

与任何代码一样,性能增益各不相同,并且可能更快或更慢,具体取决于浏览器。

关于javascript - 在循环之前定义数组的长度是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24352570/

相关文章:

javascript - 如何从 JavaScript 中计算 HTML 表格的呈现高度?

c# - Jquery ajax 完整未获取自定义响应 header ?

javascript - SigmaJS 如何过滤动态标签?

javascript - 将嵌套数组组合成具有唯一项的单个数组

python - numpy 标准化 4D 数组的 2D 子集

javascript - 在 JavaScript 中从数组中删除项目

java - 改进搜索功能

java - 测量无等待多线程 Java 程序中的争用

python - 使用Python高效实现多个列表中的单词计数

javascript - 广场 jquery 插件