gpt4 book ai didi

JavaScript 数组迭代方向

转载 作者:行者123 更新时间:2023-11-29 21:33:41 25 4
gpt4 key购买 nike

当处理一个非常大的统一(相同类型)JavaScript 对象(每个对象只有几列)的内存数组时...

在选择以行->列还是列->行的形式迭代它时,是否会对性能产生任何影响和/或需要考虑的任何其他损失?

示例

我们有来自一个CSV文件的100,000行数据,每行是一个对象,有10个整数值,我们需要触及其中的每个值进行一定的计算。

垂直或水平遍历它会有什么不同吗?现代 V8 会不会在意这些事情?

var data = [...]; // array of many same-type objects;

// horizontal iteration:
for (var p in data[0]) {
for (var i = 0; i < data.length; i++) {
var value = data[i][p]; // current value;
// calculate here from the value;
}
}

// vertical iteration:
for (var i = 0; i < data.length; i++) {
for (var p in data[0]) {
var value = data[i][p]; // current value;
// calculate here from the value;
}
}

最佳答案

唯一可以确定的方法是运行一些基准测试,我做了一个 jsperf:http://jsperf.com/vertical-vs-horizontal-loop结果取决于预期的引擎。我所做测试的早期结果(Chrome 42 是 Window 10 上的 Edge):

|     UserAgent    | horizontal iteration | vertical iteration | vertical iteration with caching | # Tests |
|:----------------:|:--------------------:|:------------------:|:-------------------------------:|:-------:|
| Chrome 42.0.2311 | 1,067 | 287 | 226 | 2 |
| Firefox 43.0 | 5,621 | 415 | 443 | 2 |
| IE 11.0 | 976 | 441 | 313 | 2 |
| Iron 46.0.2450 | 1,557 | 901 | 1,907 | 2 |
(numbers are ops/s, the higher the better)

有趣的是,水平迭代的速度从两倍到几十倍不等(在 Firefox 上)。但是只有在 Iron 46(Chromium fork so V8 引擎)上,带缓存的垂直迭代是最快的。

Node v5.1.0 的基准测试:

horizontal iteration x 1,140 ops/sec ±1.11% (63 runs sampled)
vertical iteration x 833 ops/sec ±0.92% (68 runs sampled)
vertical iteration with caching x 1,678 ops/sec ±1.13% (67 runs sampled)
Fastest is vertical iteration with caching

关于JavaScript 数组迭代方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35375655/

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