这似乎是一个特别晦涩的一点,但是我正在尝试改进我对
JavaScript语言整体的基础(更具体地说,它是最好和最有效的做法).
在http://jsperf.com/测试一个理论时,我想出了一些奇怪的结果:
假设我们有两个“相同”的原型,定义如下:
Object1
var Object1 = function() {} Object1.prototype.defaults = { radius: 400,up: 1 } Object1.prototype.centerOffset = function() { return this.defaults.radius*this.defaults.up; }
对象2
var Object2 = function() {} Object2.prototype = { defaults: { radius: 400,up: 1 },centerOffset: function() { return this.defaults.radius*this.defaults.up; } }
在执行以下简单操作时,Object1与Object2相比具有一致(如果边缘:〜3%)速度优势:
var o = new Object1(); var offset = o.centerOffset();
&安培;
var o = new Object2(); var offset = o.centerOffset();
您可以自己运行测试here.我在OSX 10.6.8上使用Chrome 25.
我想知道的是这样的:
>这个性能差异的原因是什么?
这是否表现为javascript中的一些最佳做法?
先谢谢你们.
编辑:感谢您的反馈 – 正如有些人所提到的,我进一步的测试似乎表明这个问题是浏览器(或者更确切地说,Javascript编译器具体).我已经在Safari,IE 10和Firefox中另外测试过. IE 10和Firefox都给出了非常接近的结果,没有什么不同. Safari执行Object2上的操作比Object1上的操作稍快一些(平均约为2%).我想知道什么是异常值(Other),因为这种情况下的性能差异似乎很大.