为什么在javascript中双查找速度快于单个查找?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (6)

我在jsperf测试中看到一些奇怪的行为。这是设置:

var pro={};
pro._x=3;
var q=Object.create(pro);
q.x=3;
q.z={};
q.z.x=3;

然后,我只是查找每个属性q.xq._xq.z.x

单次查找q.xq._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但我不知道它是什么类型,可能是一个Array,Objec,RegExp,Date。”,而这一块的代码 - q.z={};说 - “嘿,你在Object这里得到一个对象!确保根据这个数据类型放置一些内存”。

扫码关注云+社区