首页 > 解决方案 > 为什么在这个 JavaScript 示例中 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

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

不是shift()手术O(n)吗?

标签: javascriptarraysfirefoxv8shift

解决方案


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

当您对改变数据结构的代码进行基准测试时,您需要在每次测试运行时重新创建数据结构。我已经修复了您的 jsperf.com 案例,并且正如预期的那样shift速度较慢(请注意,可能大部分执行时间都花在了 jsperf.com 上createMatrix,因此实际上速度慢得多)。


推荐阅读