基准测试:
不变量:
var f = function() { };
var g = function() { return this; }
测试:
以下按照预期速度的顺序
new f;
g.call(Object.create(Object.prototype));
new (function() { })
(function() { return this; }).call(Object.create(Object.prototype));
实际速度:
new f;
g.call(Object.create(Object.prototype));
(function() { return this; }).call(Object.create(Object.prototype));
new (function() { })
问题:
- 当你交换内联匿名函数中的
f
和g
时,为什么使用new
(第4个测试)的效率会更低?
更新:
具体是什么导致使用内联的 f
和 g
时 new
的效率变慢。
我对 ES5 规范的引用或对 JagerMonkey 或 V8 源代码的引用感兴趣。(如有需要可以链接 JSC 和 Carakan 源代码。对于 IE 团队,如果他们愿意,可以泄露 Chakra 源代码。)
如果您链接任何 JS 引擎源代码,请解释一下。
Object.create(Object.prototype)
的目的是什么,而不是使用对象字面量({})
?它们不完全相同吗?这可能是某些性能差异的源头吗? - maericsObject.create(object.prototype)
更符合new
的 "精神"。在 Chrome 中,似乎{}
更快,在 FF 中更慢,在 IE 中大致相同。 - RaynosObject.create(Object.prototype)
更符合new
的精神,但我很想看到一个构造不只是空对象的示例来加以确认。 - Domenic