用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毫秒

 

好吧,看来没有什么性能提升,再看看多测几次的结果:

 

代码一:
[496, 482, 630, 601, 628, 588, 607, 626, 634, 661, 617, 625, 620, 621, 616, 603, 634, 598, 656, 594]  606.85
[422, 398, 362, 376, 506, 543, 543, 463, 533, 558, 566, 634, 623, 600, 589, 568, 417, 584, 588, 596]  523.45
[185, 405, 472, 360, 539, 426, 577, 471, 560, 451, 623, 413, 612, 480, 641, 647, 627, 589, 625, 566]  513.45
代码二:
[585, 338, 394, 279, 248, 246, 281, 352, 240, 234, 367, 366, 355, 519, 561, 456, 531, 557, 605, 618]  406.6
[187, 169, 366, 277, 244, 241, 235, 257, 333, 268, 244, 245, 237, 230, 232, 236, 270, 239, 233, 246]  249.45
[513, 599, 287, 297, 312, 626, 399, 576, 381, 624, 475, 202, 156, 157, 155, 155, 154, 426, 693, 581]  388.4
 
 
呃,我想已经有结论了,代码二的效率却是要高一些,其次,谷歌V8引擎却是不错
要是有哪位朋友也测试过了的话,麻烦贴下结果,毕竟我一个人的测试无法保证正确性。

 

 posted on 2014-08-30 23:34  移花香  阅读(102)  评论(0)    收藏  举报