为什么双重查找比javascript中的单个查找更快?

时间:2014-12-01 02:55:59

标签: javascript jsperf

我在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.x比预期的原型查找q._x更快。但是双重查找q.z.x是最快的。我预计q.z.x是最慢的,特别是与q.x相比时。

q.z.x甚至比q.z更快。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

使更深层查找更快的事情是,JavaScript引擎能够更好地优化代码以提高性能,因为它确切地知道它正在接收哪个对象。

与使用Object.create不同,引擎无法执行常规优化周期,使用普通的旧空对象初始化z对象的q属性,基本上允许引擎分配适当的内存并相应地为其编制索引。

这段代码var q=Object.create(pro);基本上告诉JS引擎:“嘿,你得到一个Object的实例,但我不知道它是什么类型的。可能是一个Array,Objec,RegExp,Date。“,虽然这段代码 - q.z={};说 - ”嘿,你在这里得到一个Object对象!确保按照一些内存放置一些内存对于此数据类型“。