一次使用地图与多次使用地图的性能

问题描述 投票:0回答:1

在我的大部分开发生涯中,我坚信应该避免多次迭代数组。 经过一番来回,我已经不太确定了,所以想问问大家的意见。

以下两个示例哪个性能更好?在我看来,两者都使用相同数量的 CPU 周期。

arrayOfAThousandElements.map(x => {doSmth(x); doSmthElse(x)})

这使用了 1000*2 个 cpu 周期,因为 doSmth 和 doSmthElse 仅使用一个周期。

arrayOfAThousandElements.map(x => doSmth(x)).map(x => doSmthElse(x))

这使用 1000 + 1000 个 CPU 周期。

第二个解决方案对我来说“感觉”较慢。但我不能争论它。我错过了什么吗?

javascript arrays performance theory
1个回答
0
投票

第二种解决方案会慢一些。您对“CPU 周期”的比较忽略了迭代本身的开销(翻倍)以及创建中间数组的开销。但除非功能非常琐碎,否则这种开销通常可以忽略不计。

另请注意,这两个代码实际上并不等效。你的第二个版本实际上相当于

arrayOfAThousandElements.map(x => doSmthElse(doSmth(x)))

因为第一个

map()
返回
doSmth(x)
结果的数组,这就是第二个
map()
映射的内容。仅当
doSmth()
返回其参数时,它们才等效。

© www.soinside.com 2019 - 2024. All rights reserved.