前几天无意中看到一个网友blog上关于这个循环效率的问题,说要尽量避免使用。
有点害怕,我在
JSI中可是用了不少,呵呵。
测试一下,负担终于可以放下来了:
测试对象:
一个对象模拟map,测试for in 循环
两个数组,测试for(;;)循环
连续4次运行时间比。
957/1278;955/1357;1014/1282;968/1392
明显,要实现类似map的功能,还是for in 快点。上面的数据是ff2上的结果,ie7上也差不多,差距更小一点。
测试代码:
function C(i){
  return i<62?
    String.fromCharCode(i+=
      i<26?65
        :i<52?71//97-26
          :-4//48-26-26
    )
      :i<63?'_'
        :i<64?'$'
          :C(i>>6)+C(i&63)
}
var map = {};
var arr1 = [];
var arr2 = [];
for(var i = 0;i<1000;i++){
  var c = C(i);
  map[c] = i;
  arr1.push(c);
  arr2.push(i);
}
var i = 0;
var mapTime = 0;
var arrTime = 0;
var inc = 0
while(inc++<500){
  var t1 = new Date();
  for(var n in map){
    n = map[n];
  }
  var t2 = new Date();
  for(var j = 0;j<1000;j++){
    n =arr1[j];
    n =arr2[j];
  }
  var t3 = new Date();
  mapTime+=(t2-t1);
  arrTime+=(t3-t2);
}
prompt("mapTime/arrTime",mapTime +'/'+arrTime)
	posted on 2007-05-27 17:18 
金大为 阅读(1526) 
评论(13)  编辑  收藏  所属分类: 
JavaScript