0

我正在比较两种不同类型的 setter 的性能,如下所示:

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.setvs z.x_set。我希望该z变体运行得更快,因为它需要更少的表查找。相反,该q变体始终更快。任何想法为什么?这是 jsperf:http: //jsperf.com/hq7f3

4

1 回答 1

0

您的实验现在有一些来自各种浏览器的结果。让我们看看结果。

所以我们期望zq. 但是当我们检查结果时,我们会看到两种不同类别的结果。

  1. 结果几乎相同,趋向于q稍快一些。
  2. OR z明显更快。

这告诉我的是,这取决于各种 JS 引擎的实现细节。不同的 JS 引擎使用了大量的低级优化,这改变了这些非常小的原子操作的时序特征。也许该q模式触发了z某些浏览器中没有的优化。或者也许某些浏览器对z旧浏览器不支持的模式进行了优化。但鉴于缺乏一致性,为什么很难回答。

到目前为止,从结果中很清楚的一件事是,平均速度 zq. 有时q更快,但当z更快时,它会快得多。

图表!


但实际上,差异可以忽略不计。这是一个很小的操作。从百分比的角度来看,微小操作中的微小变化可能会导致很大的变化,但在更大的应用程序中会导致性能配置文件发生非常非常小的变化。就个人而言,我认为这在学术上很有趣,但没有什么实际意义。

于 2014-10-08T22:25:12.870 回答