javascript - 为什么向后迭代数组比向前迭代更快

标签 javascript performance optimization

给定这段代码:

var arr = [];

for (var i = 0; i < 10000; ++i)
    arr.push(1);

转发

for (var i = 0; i < arr.length; ++i) {}

向后

for (var i = arr.length - 1; i >= 0; --i) {}

硬编码转发

for (var i = 0; i < 10000; ++i) {}

为什么向后快这么多?

这是测试: http://jsperf.com/array-iteration-direction

最佳答案

因为您的转发条件每次都必须接收数组的 length 属性,而另一个条件只需要检查“大于零”,这是一项非常快速的任务。

当你的数组长度在循环过程中没有变化,并且你真正关注 ns-perfomance 时,你可以使用

for (var i=0, l=arr.length; i<l; i++)

顺便说一句:您可以使用 for (var i = arr.length; i--> 而不是 for (var i = arr.length; i > 0; --i) 0; ) 真正从 n-1 到 0 遍历您的数组,而不是从 n 到 1。

关于javascript - 为什么向后迭代数组比向前迭代更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689573/

相关文章:

java - 并行深度优先搜索

javascript - JS : Refactor multi-callback function into promise

mysql - 将mysql中的bind-address更改为公共(public)服务器IP会降低性能吗?

c# - 如何在不影响 C# 性能的情况下读取和设置私有(private)字段?

c++ - DLL函数调用的开销

C - 实现将许多元素快速推送到数组末尾

python - 优化两个变量的函数,这两个变量的大小在 python 中相差几个数量级

javascript - 为什么要在构造函数之外设置 React 组件的状态?

javascript - Joi 嵌套模式

javascript - foreach 仅迭代数组的最后一个条目