为什么在此JavaScript示例中移位比索引访问快?

时间:2019-01-31 09:49:41

标签: javascript arrays firefox v8 shift

// Shifting the array and accessing 0
let sum = 0;
while(matrix.length > 0) {
  sum += matrix[0][0];
  matrix.shift();
}
// direct access
let sum = 0;
for (let i = 0; i < matrix.length; i++) {
  sum += matrix[i][0];
}

https://jsperf.com/shift-vs-index-access

移动数组并访问0的速度比 在上述jsPerf链接的给定示例中直接访问。

shift()不是O(n)操作吗?

1 个答案:

答案 0 :(得分:6)

不,不是更快。只是基准被打破了。 shift()操作将清空matrix数组,并且在第一次迭代后,您将在空数组上比较代码。

在基准测试中会更改数据结构的代码时,需要在每次测试运行时重新创建数据结构。 I've fixed your jsperf.com case和预期的shift较慢(请注意,执行时间可能大部分花费在createMatrix上,因此实际上 lot 较慢)