JavaScript.两个阵列,相同的大小,性能截然不同.为什么



方法1

const { performance } = require('perf_hooks');
performance.mark('A');
for (var i = 0; i < 100; i++) {
  let x = new Array(1000);
  x.fill(new Array(1000).fill(0));
}
performance.mark('B');
performance.measure('A to B', 'A', 'B');
const measure = performance.getEntriesByName('A to B')[0];
console.log(measure.duration); // 5.5ms

方法2

performance.mark('C');
for (var i = 0; i < 100; i++) {
  let x = new Array(1000000);
  x.fill(0);
}
performance.mark('D');
performance.measure('C to D', 'C', 'D');
const measure2 = performance.getEntriesByName('C to D')[0];
console.log(measure2.duration); // 594ms

方法1是一个百万尺寸的数组,但分布均匀。要检索/存储,我将其视为可通过一些基本哈希进行构成和检索元素的内容添加的存储。 5.5ms 对于亿万个元素

方法2是直率的百万尺寸阵列。初始化是两个数量级! 594ms 用于亿万个元素。

有人可以帮助解释这里发生了什么,并阐明了理想的数组尺寸/数组配置吗?我想这与V8/C 土地的引擎盖下的某种优化有关。

let x = new Array(1000);
x.fill(new Array(1000).fill(0));

那是两个阵列。x是一个数组,有1000个引用一个数组,该数组填充了1000个零。

元素总数:2000(x的长度为1000 它的数组指的是1000的长度)。

let x = new Array(1000000);
x.fill(0);

这是一个带有百万个零的数组。

元素总数:1000000。

最新更新