浏览器(等)是否在内部优化它们对javascript对象属性的检索?

Do browsers(etc) **internally optimize** their retrieval of javascript object properties?

本文关键字:对象 javascript 属性 检索 是否 优化 在内部 浏览器      更新时间:2023-09-26

附加说明:

我确实检查了这个以前的答案,并希望得到一个更当前的答案,这是不太具体的Chrome: JavaScript对象中的键查找性能

假设一个标准的javascript " dictionary "对象具有如下属性:

var myObject = {
   Key1: ”Value1”,
   Key2: ”Value2”,
   Key3: ”Value3”,
   …
   Key500: ”Value500”
}

是否有人知道浏览器(等)内部优化他们的检索这些属性?

一个很好的例子可能是自动排序+二进制搜索。

一个不太好的例子可能是简单的线性搜索。

EcmaScript标准规定浏览器可以按照自己的意愿进行内部操作:

[browser,etc]可能支持[object的]内部属性依赖于实现的行为,只要它与本文档中说明的特定主机对象限制。

列举属性的机制和顺序不是指定。

我真的不需要知道一个具体的优化,我只是想知道他们是否试图优化超越一个简单的线性搜索。

那么,有人有"内部"知识吗?

这取决于浏览器和JavaScript引擎。Google的V8动态创建隐藏类,而不是动态查找,以减少访问属性的时间。使用隐藏类还具有使用基于类的优化(如内联缓存)的额外好处。

在"快速属性访问"部分有更多信息。这个想法基本上来自这篇论文:Self的有效实现,一种基于原型的动态类型面向对象语言。

Internet Explorer有一个"快速类型系统"来优化属性访问。

Mozilla的SpiderMonkey引擎使用属性缓存(警告:细节有些过时,但它基本上仍然使用属性缓存)。

新的IonMonkey引擎使用内联属性缓存,但到目前为止细节似乎还不够。

是。正如您已经注意到的那样,规范不需要这样的优化,但是可以根据经验观察到。我测试了从包含多达50万个元素的对象中抓取键的速度。(在这里测试,请注意它会使浏览器冻结一段时间)。

键检索时间不随对象的大小而增加,这意味着它具有O(1)的时间复杂度。