JavaScript:更长的键会使对象查找更慢吗?

Chr*_*ris 5 javascript performance object

问题标题几乎说明了一切:更长的密钥使查找更慢?方法是:

someObj["abcdefghijklmnopqrstuv"]
Run Code Online (Sandbox Code Playgroud)

慢于:

someObj["a"]
Run Code Online (Sandbox Code Playgroud)

另一个子问题是字符串中字符的类型是否重要.字母数字键字符串更快吗?

我试着做一些研究; 网上似乎没有太多关于此的信息.任何帮助/见解将非常感激.

for*_*all 6

一般来说没有。在大多数语言中,字符串文字是“实习生”,它对它们进行散列并使它们的查找速度更快。一般来说,不同的 javascript 引擎之间可能存在一些差异,但总体而言,如果它们实施得很好(IE),应该是相当平等的。特别是因为 javascript 引擎不断被开发,这(可能)是一件很容易优化的事情,而且情况会随着时间的推移而改善。

但是,一些引擎也对被插入的字符串的长度有限制。YMMV 在不同浏览器上。我们还可以从 jsperf 测试中看到一些见解(链接在问题的评论中)。Firefox 显然进行了更积极的实习。

至于字符的类型,无论字符集如何,字符串都被视为一堆字节,因此这也可能无关紧要。引擎可能会优化可用于点符号的键,但我没有任何证据。


csg*_*csg 5

如果我们谈论使用 V8 javascript 引擎的 Chrome,性能是相同的。根据 V8 设计规范,您可以从“快速属性访问”和“动态机器代码生成”中看到,最终这些键最终会被编译为任何其他 C++ 类变量

  • 它本身不会被编译为 C++,而是被编译为机器代码。JIT'ing 只是抛出了一大堆你必须考虑的其他事情;我主要考虑 Firefox 引擎所基于的经典解释风格。V8 只是一头野兽,因为它采用了非常不同的方法。 (2认同)