gpt4 book ai didi

javascript - 循环优化改变方向

转载 作者:行者123 更新时间:2023-11-27 22:30:18 25 4
gpt4 key购买 nike

我读过有关循环优化的内容(N.Zakas,Javascript Optimization)。那里写道,对数组使用逆循环比直接循环更优化。这看起来完全符合逻辑:

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

- 检查状况
- 增加变量i

for(i = length;i--;)

- 检查条件+增加变量i(在一个表达式中)
但是,我在 Chrome 中得到了意想不到的结果。

var len = 100000000,
arr = new Array(len),
i = len - 1,
start = new Date(),
end;

for(i = 0; i < len; i++){
arr[i] = 1;
}

end = new Date();

console.log(end - start);

Direct loop return result near 4500ms, but inversed loop... 9500ms!

为什么?

最佳答案

只是因为 for(i = length;i--;) 中的代码较少并不意味着要做的事情更少; i仍然需要递增(或者在本例中,递减),并且仍然需要进行检查(之前是 i < length ,现在是 i != 0 )。

我可能预计时间差异是由于 for(i = 0; i < length; i++)是一个非常常见的构造,因此很容易优化(因此现代编译器/解释器投入了资源来显式优化它们)。但我承认这只是猜测。

向后迭代可能会显着提高速度的一种情况是,当您弹出数组的内容时:

for(i = 0; i < arr.length; i++) arr.splice(i,1);可能会从数组中删除第一个元素,并将所有其他元素向后移动以填充其在引擎盖下的位置。

而:

for(i = arr.length; i--; ) arr.splice(i,1);可能只需要减少底层数组的长度(便宜得多!)。

我不确定这是否是您想要的优化,但要点不是“向后迭代更快!”一般意义上。

关于javascript - 循环优化改变方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39649090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com