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。

先到这里了,如果我的测试代码有问题请指出。谢谢!!!