javascript - 为什么在这个 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)
吗?
解决方案
不,它并没有更快。只是你的基准被打破了。该shift()
操作清空matrix
数组,在第一次迭代后,您将比较空数组上的代码。
当您对改变数据结构的代码进行基准测试时,您需要在每次测试运行时重新创建数据结构。我已经修复了您的 jsperf.com 案例,并且正如预期的那样shift
速度较慢(请注意,可能大部分执行时间都花在了 jsperf.com 上createMatrix
,因此实际上速度要慢得多)。
推荐阅读
- c++ - 为什么括号中的 AND 与没有的评估不同?
- jquery - jQuery 选择器,只要它没有特定的类,就可以按类及其子元素对元素的点击进行定位
- c++ - 如何通过带有 WinHTTP (C++) 的代理发送带有标头和 json 数据的 HTTP 发布请求
- flutter - Flutter 如何选择上一个被禁用的日期?
- python - 根据目录中的文件夹返回字符串
- python - Python如何确定两个集合是否相等?有什么可能的优化吗?
- clojurescript - 所需的 JS 依赖项“readable-stream/writable.js”不可用,它是“node_modules/stream-browserify/index.js”所需的
- pine-script - Tradingview 使用给定的开始日期测试策略
- vbscript - 我可以在 if 语句中添加条件吗
- blockchain - 如何在私有网络的底层区块链中设置系统属性?