我想知道在计算上调用嵌套在对象中的函数的最快方法是什么,所以我做了一个快速的 jsPerf.com 基准测试,其中我考虑了三种可能性——从数组中调用函数,从“核心”中调用函数对象和函数对象:
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 <<
最佳答案
性能因实现而异,但以下是一些可能解释差异的见解:
首先,您在这里测量的不是函数调用。您正在测量 array[2]
、someFunc.three
和 obj.three
的查找速度。
您会看到数组和对象的速度几乎相同,但 new
构造明显更快。
数组索引和对象属性可以通过二分查找来解决。我猜数组索引在您测试的引擎上稍微慢一些。
new
构造速度如此之快的一个原因是因为它被编译成一个类,这为整个优化范围打开了大门。我不确定您是否获得了性能,因为查找速度更快,或者是否在其他地方进行了优化。
另一件需要注意的事情是,您不应该让自己受制于这些小的性能基准。在正常使用下,这些解决方案中的任何一个都很好,特别是因为它们会影响您编写代码的方式。如果您遇到实际的性能问题,就可以更轻松地就优化位置做出正确的决定。
关于javascript - 为什么调用嵌套在函数对象中的函数比...更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24714557/