小编moo*_*ard的帖子

为什么Array.prototype.fill()与`for`循环相比具有如此大的性能差异?

在对该Array.prototype.fill()方法进行一些测试(Chrome on macOS)时,它显然比简单地创建自己的for循环和填充数组慢两倍(如果不是更慢).

显然做类似的事情:

for( var i = 0; i < Array.length; i++) {
   A[i] = 0;
}
Run Code Online (Sandbox Code Playgroud)

VS

Array.fill(0);
Run Code Online (Sandbox Code Playgroud)

Array.fill()方法需要大约210-250ms来填充大小为10000000的数组,而for循环需要大约70-90ms.似乎Array.fill()可以重写该方法以简单地使用直接循环,因为您总是知道您的初始索引和目标索引.

let arrayTest = new Array(10000000),
    startTime,
    endTime;

startTime = performance.now();
arrayTest.fill(0);
endTime = performance.now();

console.log("%sms", endTime - startTime);
arrayTest = new Array(10000000);
startTime = performance.now();
for (let i = 0; i < arrayTest.length; i++){
  arrayTest[i] = 0;
}
endTime = performance.now();

console.log("%sms", endTime - startTime);
Run Code Online (Sandbox Code Playgroud)

与我在本地测试时相比,上面实际上显示出更大的差异.

编辑:我现在意识到,经过进一步的测试,当切换到Firefox及其真正的引擎依赖时,差异会大大减少.我猜这主要是因为不同的JavaScript引擎优化循环与方法的结果.尽管如此,似乎仍然Array.prototype.fill()可以优化其中的循环以解决这种差异.

javascript arrays google-chrome v8

7
推荐指数
1
解决办法
715
查看次数

Square有沙盒测试账号吗?

我正在尝试为Square Connect API开发包装器.我正在寻找沙盒帐户或将测试数据导入新帐户的方法,以便我可以快速开始使用开发方面.

谢谢!

square-connect

3
推荐指数
1
解决办法
4723
查看次数

标签 统计

arrays ×1

google-chrome ×1

javascript ×1

square-connect ×1

v8 ×1