JavaScript性能之 数组

最近看了《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。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值