浏览器(等)是否在内部优化它们对javascript对象属性的检索?
Do browsers(etc) **internally optimize** their retrieval of javascript object properties?
附加说明:
我确实检查了这个以前的答案,并希望得到一个更当前的答案,这是不太具体的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)
的时间复杂度。
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值