我想知道什么是计算最快的方法来调用嵌套在对象中的函数,所以我做了一个快速的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 <<
答案 0 :(得分:5)
每个实施的性能各不相同,但以下是一些可能解释其差异的见解:
首先,你在这里测量的不是函数调用。您正在衡量array[2]
,someFunc.three
和obj.three
的查找速度。
您看到数组和对象的速度几乎相同,但new
结构明显更快。
可以通过二进制搜索来解析数组索引和对象属性。我想你测试的引擎上的数组索引会稍慢一些。
new
构造可能如此快速的原因是因为它被编译成一个类,从而将其打开到一系列优化。我不确定您是否获得了性能,因为查找速度更快或者优化是否在其他地方。
另一点需要注意的是,您不应该让自己受到这些小型性能基准的指导。在正常使用情况下,这些解决方案中的任何一个都很好,特别是因为它们会影响您编写代码的方式。如果您遇到实际的性能问题,就可以更轻松地做出优化的决策。