为什么调用嵌套在函数对象中的函数比...更紧固?

时间:2014-07-12 15:43:33

标签: javascript performance

我想知道什么是计算最快的方法来调用嵌套在对象中的函数,所以我做了一个快速的jsPerf.com基准测试,我考虑了三种可能性 - 从数组调用函数,从&#39 ;核心'对象和函数对象:

var array = [1, 1, function(number) { return number; }];

var funcObj = function() {
    this.one = 1;
    this.two = 2;
    this.three = function(number) { return number; };
}
var someFunc = new funcObj();

var obj = {
    one: 1,
    two: 1,
    three: function(number) { return number; }
}

这就是发生的事情:

现在,问题是:为什么会有这么大的差异?

编辑:链接到基准:>> link <<

1 个答案:

答案 0 :(得分:5)

每个实施的性能各不相同,但以下是一些可能解释其差异的见解:

首先,你在这里测量的不是函数调用。您正在衡量array[2]someFunc.threeobj.three的查找速度。

您看到数组和对象的速度几乎相同,但new结构明显更快。

可以通过二进制搜索来解析数组索引和对象属性。我想你测试的引擎上的数组索引会稍慢一些。

new构造可能如此快速的原因是因为它被编译成一个类,从而将其打开到一系列优化。我不确定您是否获得了性能,因为查找速度更快或者优化是否在其他地方。


另一点需要注意的是,您不应该让自己受到这些小型性能基准的指导。在正常使用情况下,这些解决方案中的任何一个都很好,特别是因为它们会影响您编写代码的方式。如果您遇到实际的性能问题,就可以更轻松地做出优化的决策。