JavaScript性能之 数组
来源:互联网 发布:java小游戏开发教程 编辑:程序博客网 时间:2024/05/23 01:13
最近看了《JavaScript高级程序设计(第二版)》和《JavaScript语言精粹》这两本书。发现其中对于数组的解释不一样。于是个人写了些代码做测试,做个记录&分享。同时也想碰到个大婶看看我的测试代码写的是否正确。
先看《JavaScript高级程序设计(第二版)》中的说法吧。
这段话说JavaScript中的数组和其他语言中的数组一样,访问数组与访问常量的计算复杂度都是O(1),所以访问数组比访问对象快。但是《JavaScript语言精粹》中却说,
这里的意思是JavaScript中的数组和其他对象一样,也就是访问数组和访问对象的复杂度都不是O(1)。为了验证孰是孰非,今天上午写了个测试代码。进行验证,以下是代码
var array = [],i = 0,object = {},value = -1,beginTime = null,endTime = null;beginTime = new Date();for (i = 1000000; i > 0; i--) { array.push(i);}endTime = new Date();document.writeln('数组创建时间为:' + (endTime - beginTime) + 'ms<br/>');beginTime = new Date();for (i = 1000000; i > 0; i--) { object.i = true;}endTime = new Date();document.writeln('对象创建时间为:' + (endTime - beginTime) + 'ms<br/>');beginTime = new Date();for (i = 1000000; i > 0; i--) { value = array[i];}endTime = new Date();document.writeln('数组访问时间为:' + (endTime - beginTime) + 'ms<br/>');beginTime = new Date();for (i = 1000000; i > 0; i--) { value = object.i;}endTime = new Date();document.writeln('对象访问时间为:' + (endTime - beginTime) + 'ms<br/>');beginTime = new Date();for (i = 1000000; i > 0; i--) { value = i;}endTime = new Date();document.writeln('常量访问时间为:' + (endTime - beginTime) + 'ms<br/>');
以下是测试结果,
IE
Firfox
Chrome
实测结果证明《JavaScript语言精粹》中的解释是符合实际情况的,而且数组的创建和访问要慢于对象创建和访问速度。
对于什么时候用数组什么时候用对象,《JavaScript语言精粹》中建议当需要像这样“[n]”访问时用数组,其他情况都用对象。个人认为比较合理。
另外测试意外收获,IE不是一般的慢啊。差了一个数量级了。
最后测试环境,Window7系统,IE9,Firfox 15.01,Chrome 22.0.1229.94 m。
先到这里了,如果我的测试代码有问题请指出。谢谢!!!
- JavaScript性能之 数组
- javascript对象之javascript数组
- JavaScript之数组Array
- JavaScript之内部数组
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组操作
- javascript之数组
- javascript之数组操作
- javascript之数组操作
- javascript之101数组
- 九度oj 文献排序
- Android解包打包system.img的方法
- java 和 android 文件管理器(递归算法)
- Android Memory Management, OutOfMemoryError
- 利用ContentProvider获取手机中联系人的信息
- JavaScript性能之 数组
- baofeng 火柴问题
- ODI之知识模块(KM)学习笔记一(KM概括)
- 英文名大全及含义(女)
- android C开发注意
- python的__call__
- win32拆分窗口
- 关闭apache服务器banner
- 【我害怕我心碎时没人帮我擦眼泪】