[英]Is using a numeric for loop with an array of keys faster than iterating over an object with a for-in loop in JavaScript?
请注意:这个问题纯粹是假设性的,用于学习目的。 我不打算进行不必要的微优化。
根据我所做的研究,与其他循环相比,使用for-in循环似乎相对较慢。 例如,这个循环:
const obj = { a: 'a', b: 'b', c: 'c', ... };
for (key in obj) {
const val = obj[key];
}
平均比这个循环慢大约 7 倍:
const arr = [ 'a', 'b', 'c', ... ];
for (let i = 0; i < arr.length; i++) {
const val = arr[i];
}
我使用for-in的替代解决方案是创建一个键数组,我可以使用数字 for 循环对其进行迭代,然后在 object 中查找这些键。
我想知道,这会是比 for-in 循环更好的解决方案(纯粹就原始性能而言):
const keys = [ 'a', 'b', 'c', ... ]
const obj = { a: 'a', b: 'b', c: 'c', ... }
for (let i = 0; i < keys.length; i++) {
const val = obj[keys[i]];
}
多亏了 VLAZ 的大力支持,我在其他地方询问后才弄明白。 另一个人向我推荐了Benchmark.js
,我得出结论,对于大数据,带查找键的数字大约比 for-in 快 10 倍。
数据大小:
const iterations = 1000000;
const obj = {};
for (let i = 0; i < iterations; i++) {
obj1['s' + i] = 1;
}
const arr = [];
for (let i = 0; i < iterations; i++) {
arr[i] = 's' + i;
}
for-in 基准:
for (key in obj) {
const v = obj[key];
}
完成时间:~0.3174 秒
用于查找的数字:
for (let i = 0; i < arr.length; i++) {
const v = obj[arr[i]];
}
完成时间:~0.0396 秒
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.