IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Array的push与unshift方法性能分析

Heero's Blog 2010-09-14 08:53:23 累计浏览 3,832 次
本机暂存

Array的pushunshift方法都能给当前数组添加元素,不同的是,push是在末尾添加,而unshift则是在开头添加。从原理就可以知道,unshift的效率是较低的。原因是,它每添加一个元素,都要把现有元素往下移一个位置。但到底效率差异有多大呢?下面来测试一下。

测试环境的主要硬件:CPU T7100(1.8G);内存4G DDR2 667;硬盘5400转。主要软件:操作系统为Windows 7;浏览器为Firefox 3.6.9。测试代码:

var arr = [ ], s = +new Date;

// push性能测试
for (var i = 0; i < 50000; i++) {
  arr.push(i);
}

console.log(+new Date - s);

s = +new Date;
arr = [ ];

// unshift性能测试
for (var i = 0; i < 50000; i++) {
  arr.unshift(i);
}

console.log(+new Date - s);

这段代码分别执行了50000次push和unshift操作,运行一次以后,得出结果:

12
1152

可见,unshift比push要慢差不多100倍!因此,平时还是要慎用unshift,特别是对大数组。那如果一定要达到unshift的效果,有没有其他方法呢?答案是肯定的。

Array有一个叫做reverse的方法,能够把一个数组反转。先把要放进数组的元素用push添加,再执行一次reverse,就达到了unshift的效果。比如:

for (var i = 0; i < 50000; i++) {
  arr.push(i);
}
arr.reverse();

reverse的性能又如何呢,下面再来测试:

var arr = [ ], s = +new Date;

for (var i = 0; i < 50000; i++) {
  arr.push(i);
}
arr.reverse();

console.log(+new Date - s);

结果是:

12

可见,reverse性能极高,没有明显的性能消耗

同分类推荐文章

  1. translateZ() (2026-06-25 21:18:56)
  2. translateY() (2026-06-25 21:17:56)
  3. translateX() (2026-06-25 21:16:01)

查看更多 前端 文章 →

建议继续学习

  1. JQuery实现Excel表格呈现 (累计阅读 48,350)
  2. 深入理解Javascript之执行上下文(Execution Context) (累计阅读 18,404)
  3. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
  4. Linux如何统计进程的CPU利用率 (累计阅读 16,308)
  5. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (累计阅读 15,933)
  6. 如何查找消耗资源较大的SQL (累计阅读 15,212)
  7. 图片动态局部毛玻璃模糊效果的实现 (累计阅读 14,849)
  8. 天朝第二代身份证号码的验证机制 (累计阅读 14,763)
  9. HTML 5 的data-* 自定义属性 (累计阅读 14,349)
  10. 分享一个JQUERY颜色选择插件 (累计阅读 14,223)