我在 jsperf 中看到一些奇怪的行为测试。这是设置:
var pro={};
pro._x=3;
var q=Object.create(pro);
q.x=3;
q.z={};
q.z.x=3;
然后我简单地查找每个属性 q.x
、q._x
和 q.z.x
。
如预期的那样,单个查找 q.x
比原型(prototype)查找 q._x
更快。但是双重查找 q.z.x
是最快的。我预计 q.z.x
是最慢的,尤其是与 q.x
相比时。
q.z.x
比 q.z
还要快。这是怎么回事?
最佳答案
让更深层次的查找更快的是 JavaScript 引擎能够更好地优化代码以提高性能,因为它确切地知道它正在接收什么对象。
与使用 Object.create
不同,引擎无法执行其常规优化周期,使用普通的旧空对象来初始化 的
对象,基本上允许引擎分配适当的内存并相应地对其进行索引。z
属性>q
这段代码 var q=Object.create(pro);
基本上告诉 JS 引擎:“嘿,你正在获取 Object
的实例但是我不知道它是什么类型。可能是数组、对象、正则表达式、日期。”,而这段代码 -- q.z={};
说 -- “嘿,你在这里得到一个 Object
对象!确保根据这个数据类型留出一些内存。
关于javascript - 为什么在 javascript 中双重查找比单次查找更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27221046/