gpt4 book ai didi

对于随机查找,JavaScript Map 比 Object 慢得多?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:41:37 24 4
gpt4 key购买 nike

考虑以下两个片段(来自 this jsperf entry ):

let val = 0;
for(let i of indices) {
val += map.get(i);
}
// ---
let val = 0;
for(let i of indices) {
val += obj[i];
}

这里,map 是一个 Mapobj 是一个普通的旧 JavaScript 对象 (let obj = {}),而 indices 是一个随机索引数组。 objmap 都已预先填充数据,因此查找实际上会返回数据。查看 jsperf 以获取完整代码。

问题:

为什么普通的旧 javascript 对象的性能优于 Map 5 倍以上?这仅仅是因为在撰写本文时,Map 仍然非常新且未优化吗?或者在 Map 查找中是否存在一些开销,这将始终阻止它像 POJO 一样快?

如果它还没有优化,我们是否可以期望它在随机查找方面比 POJO 更快最终?为什么?为什么不呢?

最佳答案

感谢@Bergi 的回答。

Map 相比,普通 JavaScript 对象在初始 jsperf 中表现如此出色的原因是因为在引擎盖下,JS 引擎可以看到我们正在使用对象,就像它是一个数组(连续整数键),所以它“假设”它是一个数组,并且可以基于它进行一系列优化。 Map 不是这样。

但是 Map 还有一个缺点,它需要一个方法调用 (map.get(p)),而不是直接的属性查找 (obj[p]).正如这个 jsperf 所示,这还没有(不能?)优化掉:http://jsperf.com/map-vs-pojo-lookups

关于对于随机查找,JavaScript Map 比 Object 慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44321324/

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