在对该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()可以优化其中的循环以解决这种差异.
我正在尝试为Square Connect API开发包装器.我正在寻找沙盒帐户或将测试数据导入新帐户的方法,以便我可以快速开始使用开发方面.
谢谢!