JavaScript对象中键查找的性能

时间:2011-10-09 02:07:24

标签: javascript dictionary hash

我刚读过这个问题:are there dictionaries in javascript like python?

其中一个答案表示您可以使用Python字典之类的JavaScript对象。真的吗?对象中键查找的性能如何?是O(1)?是否为对象添加一个键也是恒定时间(散列)?

3 个答案:

答案 0 :(得分:54)

V8 design docs暗示查找至少会快速,如果不是更快:

  

大多数JavaScript引擎使用类似字典的数据结构   对象属性的存储 - 每个属性访问都需要一个   动态查找以解析属性在内存中的位置。这个   方法通常在JavaScript中访问属性   比在编程语言中访问实例变量要慢   Java和Smalltalk。在这些语言中,定位了实例变量   由于固定对象,由编译器确定的固定偏移量   由对象类定义的布局。访问只是一个问题   内存加载或存储,通常只需要一条指令。

     

为了减少访问JavaScript属性所需的时间,V8可以   不使用动态查找来访问属性。相反,V8动态   在幕后创建隐藏的类。 [...] 在V8中,对象发生变化   添加新属性时隐藏的类。

但是,由于隐藏的类创建,添加新密钥可能会稍慢一些。

答案 1 :(得分:19)

是的,您可以假设添加密钥,以及稍后使用它进行访问是有效常量时间操作。

在引擎盖下,JS引擎可以应用一些技术来优化后续查找,但是出于任何算法的目的,您可以假设O(1)。

答案 2 :(得分:1)

看看类似的问题How does JavaScript VM implements Object property access?和我的answer。在这里,我描述了JS引擎使用的优化技术以及它如何影响键查找性能。我希望了解这些细节可以使您编写更有效的JS代码。