我正在比较两种不同类型的设置者的表现,如下所示:
var q={};
var z={};
(function(){
var x=1;
q.x=function(){
return x;
};
q.x.set=function(val){
x=val;
};
})();
(function(){
var x=1;
z.x=function(){
return x;
};
z.x_set=function(val){
x=val;
};
})();
不同之处在于存储setter的位置:q.x.set
vs z.x_set
。我希望z
变体运行得更快,因为它需要少一个表查找。相反,q
变体一直更快。有什么想法吗?这是jsperf:http://jsperf.com/hq7f3
答案 0 :(得分:0)
您的实验现在有来自各种浏览器的一些结果。让我们看看结果。
因此我们希望z
比q
更快。但是当我们检查结果时,我们会看到两种不同的结果。
q
略快一些。z
明显更快。这告诉我的是,这是各种JS引擎的实现细节的摆布。不同的JS引擎使用大量的低级优化,这改变了这些非常小的原子操作的时序特性。也许q
模式会触发z
在某些浏览器中不存在的优化。或者也许某些浏览器对旧版浏览器不支持的z
模式进行了优化。但鉴于缺乏一致性,为什么很难回答。
到目前为止,结果显而易见的一点是平均 z
比q
更快。有时q
会更快,但当z
更快时,速度会快得多。
但实际上,差异可以忽略不计。这是一个很小的操作。微小操作中的微小变化可能导致从百分比角度进行大的变化,但是在更大的应用程序中对性能曲线的变化非常小。就个人而言,我认为这在学术上很有意思,但实际上没有什么后果。