用for循环遍历了数组进行操作,我想很多人都会使用如下代码:
for(var i=0;i<arr.length;i++){
/*coding*/
}
但是不少人推荐的写法是:
for(var i=0,len=arr.length;i<len;i++){
/*coding*/
}
推荐后者是因为后者效率更高,前者每次循环都要用i和arr.length对比,而后者,将arr.length存储到变量len中,用i和len对比,所以效率要高。
然而事实果真如此吗?拭目以待。
测试一代码以:
var arr=new Array();//遍历用的数组
var times=new Array();//保存运行时间的数组
for(var i=0;i<1000;i++){
arr.push("one");
}//初始化遍历用的数组
for(var k=0;k<20;k++){//遍历20次
var one=new Date();
for(var i=0;i<arr.length;i++){//遍历数组
console.log(i);
}
var two=new Date();
times.push(two-one);//保存每次遍历时间
}
console.log(times);
var total=0;
times.map(function(one){
total+=one;
})
console.log(total/20);
[210, 236, 155, 152, 254, 284, 237, 160, 175, 182, 318, 436, 578, 639, 636, 609, 612, 623, 400, 428] 366.2
运行结果:366.2,即平均每次遍历需要366.2毫秒(用的是谷歌浏览器,运算量却是有点大,谷歌略卡,火狐直接不出结果。。。还是谷歌的v8引擎厉害啊!!)
测试二代码如下:
var arr=new Array();//遍历用的数组
var times=new Array();//保存运行时间的数组
for(var i=0;i<1000;i++){
arr.push("one");
}//初始化遍历用的数组
for(var k=0;k<20;k++){//遍历20次
var one=new Date();
for(var i=0,len=arr.length;i<len;i++){//遍历数组
console.log(i);
}
var two=new Date();
times.push(two-one);//保存每次遍历时间
}
console.log(times);
var total=0;
times.map(function(one){
total+=one;
})
console.log(total/20);
[308, 246, 243, 282, 265, 240, 237, 241, 228, 288, 163, 166, 471, 587, 581, 606, 581, 604, 567, 572] 373.8
//运行结果:373.8毫秒
好吧,看来没有什么性能提升,再看看多测几次的结果:
posted on
浙公网安备 33010602011771号