talk is cheap,show me the code!
- var obj:Object = { };
- var arrVector:Vector.<int> = new Vector.<int>();
- var arrArray:Array = [];
-
- var len:int;
- var i:int;
- var key:String;
- var val:int;
- var t1:int, t2:int, t3:int, t4:int, t5:int, t6:int, t7:int, t8:int, t9:int,t10:int;
- var t11:int, t12:int, t13:int, t14:int, t15:int, t16:int, t17:int, t18:int, t19:int;
-
- //初始化50万个元素
- t1 = getTimer();
- for (i = 0; i < 500000; i++)
- {
- obj[i] = i;
- arrVector.push(i);
- arrArray.push(i);
- }
- //for遍历key
- t2 = getTimer();
- for (key in obj)
- {
- val = obj[key];
- }
- //for each 遍历value
- t3 = getTimer();
- for each(val in obj)
- {
- val;
- }
- //for each 遍历Vector
- t4 = getTimer();
- for each(val in arrVector)
- {
- val;
- }
- //for循环Vector,length属性放for里面
- t5 = getTimer();
- for (i = 0; i < arrVector.length; i++)
- {
- val = arrVector[i];
- }
- //for循环Vector,length属性放for外面
- t6 = getTimer();
- len = arrVector.length;
- for (i = 0; i < len; i++)
- {
- val = arrVector[i];
- }
- //for each遍历Vector
- t7 = getTimer();
- for each(val in arrVector)
- {
- val;
- }
- //for循环Array,length属性放for里面
- t8 = getTimer();
- for (i = 0; i < arrArray.length; i++)
- {
- val = arrArray[i];
- }
- //for循环Array,length属性放for外面
- t9 = getTimer();
- len = arrArray.length;
- for (i = 0; i < len; i++)
- {
- val = arrArray[i];
- }
- t10 = getTimer();
-
- trace("1:" + (t2-t1));//288
- trace("2:" + (t3-t2));//1974
- trace("3:" + (t4-t3));//67
- trace("4:" + (t5-t4));//50
- trace("5:" + (t6-t5));//44
- trace("6:" + (t7-t6));//42
- trace("7:" + (t8-t7));//52
- trace("8:" + (t9-t8));//70
- trace("9:" + (t10-t9));//46
复制代码可以看出for遍历object获得key,然后再用obj[key]获得value的方式性能是最低的! 用Vector,然后把length提前赋值出来,再for循环是最快的! 补充:根据这篇文章(jacksondunstan.com/articles/2514)的测试结果,在使用for in循环时,不指定key的类型,比定义string类型的key,快5倍: - // 慢!
- for (var str:String in obj)
- {
- }
-
- // 比上面那种方式快 5 倍!
- for (var key:* in obj)
- {
- }
复制代码 作者:YoYo,原文地址:http://yoyo.play175.com/p/202.html
|