前几天无意中看到一个网友blog上关于这个循环效率的问题,说要尽量避免使用。
有点害怕,我在 JSI中可是用了不少,呵呵。
测试一下,负担终于可以放下来了:
测试对象:
一个对象模拟map,测试for in 循环
两个数组,测试for(;;)循环
连续4次运行时间比。
957/1278;955/1357;1014/1282;968/1392
明显,要实现类似map的功能,还是for in 快点。
上面的数据是ff2上的结果,ie7上也差不多,差距更小一点。
测试代码:
有点害怕,我在 JSI中可是用了不少,呵呵。
测试一下,负担终于可以放下来了:
测试对象:
一个对象模拟map,测试for in 循环
两个数组,测试for(;;)循环
连续4次运行时间比。
957/1278;955/1357;1014/1282;968/1392
明显,要实现类似map的功能,还是for in 快点。
上面的数据是ff2上的结果,ie7上也差不多,差距更小一点。
测试代码:
js 代码
- 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)