javascript - 为什么调用嵌套在函数对象中的函数比...更快?

标签 javascript performance

我想知道在计算上调用嵌套在对象中的函数的最快方法是什么,所以我做了一个快速的 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.threeobj.three 的查找速度。

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

数组索引和对象属性可以通过二分查找来解决。我猜数组索引在您测试的引擎上稍微慢一些。

new 构造速度如此之快的一个原因是因为它被编译成一个类,这为整个优化范围打开了大门。我不确定您是否获得了性能,因为查找速度更快,或者是否在其他地方进行了优化。


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

关于javascript - 为什么调用嵌套在函数对象中的函数比...更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24714557/

相关文章:

javascript - 'this' 在下面的 javascript 中代表什么?

javascript - 使用jquery单击按钮扩展文本

performance - 快速 SSE 阈值算法

php - MySql 行进行排序以提高性能

java - 有没有办法从 JVM 内部判断某个特定方法是否已经过 JIT 编译?

c# - 将窄类型转换为宽类型以节省内存并保持高精度计算是不是一个糟糕的主意?

javascript - CSS3 悬停在图标元素上

javascript - 如何防止通过光标拖动选择文本/元素

javascript - 如何在HTML表格中显示二维数组JSON对象的内容

python - 有什么方法可以加快Seaborns Pairplot的速度