gpt4 book ai didi

javascript - 为什么通过键在对象中搜索值比在 js 中使用 'for in' 慢?

转载 作者:IT老高 更新时间:2023-10-28 21:59:28 24 4
gpt4 key购买 nike

为什么在对象中通过键搜索值比在 JavaScript 中使用 for in 慢?

喜欢这段代码:

const a = { a: { txt: 1 }, b: { txt: 2 }, c: { txt: 3 }, d: { txt: 4 }, e: { txt: 5 }, f: { txt: 6 } };

console.time('1');
let n = a['e'].txt;
console.log(n, '<<n')
console.timeEnd('1');

console.time('2');
for (const key in a) {
if (a[key].txt == 5) {
const m = a[key];
console.log(m, '<<m')
break;
}
}
console.timeEnd('2');

结果是

5 '<<by key'1: 2.329ms{ txt: 5 } '<<for in '2: 0.447ms

这不是很奇怪吗?

最佳答案

这是因为 JIT 编译器的工作方式。

当你用 Node 启动一个 JS 脚本时,V8 开始解释它,同时将它编译成 native 机器代码。

在 Chrome Devtools 控制台中运行它,我得到以下输出:

5 "<<n"
0.167724609375ms
{txt: 5} "<<m"
2: 0.262939453125ms

NodeJS 输出:

5 '<<n'
1: 18.684ms
{ txt: 5 } '<<m'
2: 3.713ms

但是当反转 2 个变体时:

const a = { a: { txt: 1 }, b: { txt: 2 }, c: { txt: 3 }, d: { txt: 4 }, e: { txt: 5 }, f: { txt: 6 } };


console.time('2');
for (const key in a) {
if (a[key].txt = 5) {
const m = a[key];
console.log(m, '<<m')
break;
}
}

console.timeEnd('2');
console.time('1');
let n = a['e'].txt;
console.log(n, '<<n')
console.timeEnd('1');

输出:

{ txt: 5 } '<<m'
2: 22.017ms
5 '<<n'
1: 0.245ms

如您所见,第一个执行的版本比第二个执行的时间要长。

但是,如果你平均一下,你可以看到执行 key 访问比 for in 循环快得多。

关于javascript - 为什么通过键在对象中搜索值比在 js 中使用 'for in' 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55157295/

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