object.property和map.get(object)之间的性能

时间:2015-05-20 05:21:17

标签: javascript performance v8 ecmascript-6

在ECMAScript 6中,我有两种方法来定义字典:

传统方法(dictionary = Object.create(null)):

  • 设置属性:dictionary.key = valuedictionary[key] = value

  • 获取属性:dictionary.keydictionary[key]

使用地图(带dictionary = new Map()):

  • 设置参考:dictionary.set(key, value)

  • 获取参考:dictionary.get(key)

在V8中,它们是否具有相同的性能?

2 个答案:

答案 0 :(得分:1)

您可以使用JSPerf在herehere自行测试。看起来结果因V8版本而异。

答案 1 :(得分:-1)

原则上,Maps()意味着可变的键值存储,并且[不保证]可以实现为哈希映射。

另一方面,javascript引擎将尝试根据对象的创建位置和方式派生对象形状(将它们视为特定类型对象的隐式类定义),并在固定时为其提供固定布局和特定键相对于对象标题的偏移量。对于一小组固定的密钥,这种方法效果很好(缓存比哈希映射更友好)。

如果javascript引擎检测到对象与某些特定形状不符,那么他们会将其更像是地图。

因此,一般指导原则是:如果您事先知道密钥并且其编号不超过十几个,并且您可以将其值设置为null,则可以使用对象。< / p>

如果您正在处理数百个密钥或动态生成的密钥,请使用Map()