为什么Array.push(val)比像array [array.length] = val这样的表达式更快?

时间:2016-08-24 18:03:45

标签: javascript arrays performance computer-science

我正在观看道格拉斯·克罗克福德(Douglas Crockford)的JS视频,他提到了一种方式来推动"推动"将项目放入数组中,而不使用#S8方法。它非常简单,是我从未想过要做的事情,但在进行速度测试后,我发现它比Array.push慢,这对我来说没有多大意义。

Array.push(与Array.push完全相同,加上其他内容以及调用函数本身的成本)之类的内容如何更快一个简单的表达?

也许我的测试很糟糕,也许我在这里缺乏CS基础知识,但如果有人能解释这里的速度差异,我真的很感激。我只是想看看array[array.length] = val是否是array[array.length] = val的更快替代品,但显然不是。克

这就是Array.push的实施方式:

Array.push

正如你所看到的,它显然有更多的逻辑,然后是一个简单的表达,但它更快。

看看:

function push(value) {
    var len = this.length;
    this[len] = value;
    len++;
    this.length = len;
    return len;
}

运行上面的示例,我得到0.015000000001236913,或简称为0.015。

现在让我们看一下let arr = [], p1 = performance.now(); for (let i = 1, len = 10; i <= len; i++) { arr[arr.length] = i; } let p2 = performance.now(); console.log(p2 - p1);

Array.push

运行上面的示例,我得到0.010000000002037268,或简称为0.010。

let arr = [], p1 = performance.now(); for (let i = 1, len = 10; i <= len; i++) { arr.push(i); } let p2 = performance.now(); console.log(p2 - p1); 为0.010,Array.push为0.015,使用相同的循环。

这怎么可能?这对我来说完全没有意义。我在这里缺少什么?

0 个答案:

没有答案