守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 741|回复: 0

[算法/性能优化] Object、Array、Vector遍历性能测试

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51823
    钢镚
    1422

    开源英雄守望者

    发表于 2015-1-8 18:08:06 | 显示全部楼层 |阅读模式
    talk is cheap,show me the code!
    1. var obj:Object = { };
    2. var arrVector:Vector.<int> = new Vector.<int>();
    3. var arrArray:Array = [];

    4. var len:int;
    5. var i:int;
    6. var key:String;
    7. var val:int;
    8. var t1:int, t2:int, t3:int, t4:int, t5:int, t6:int, t7:int, t8:int, t9:int,t10:int;
    9. var t11:int, t12:int, t13:int, t14:int, t15:int, t16:int, t17:int, t18:int, t19:int;

    10. //初始化50万个元素
    11. t1 = getTimer();
    12. for (i = 0; i < 500000; i++)  
    13. {
    14.     obj[i] = i;
    15.     arrVector.push(i);
    16.     arrArray.push(i);
    17. }
    18. //for遍历key
    19. t2 = getTimer();
    20. for (key in obj)
    21. {
    22.     val = obj[key];
    23. }
    24. //for each 遍历value
    25. t3 = getTimer();
    26. for each(val in obj)
    27. {
    28.     val;
    29. }
    30. //for each 遍历Vector
    31. t4 = getTimer();
    32. for each(val in arrVector)
    33. {
    34.     val;
    35. }
    36. //for循环Vector,length属性放for里面
    37. t5 = getTimer();
    38. for (i = 0; i < arrVector.length; i++)  
    39. {
    40.     val = arrVector[i];
    41. }
    42. //for循环Vector,length属性放for外面
    43. t6 = getTimer();
    44. len = arrVector.length;
    45. for (i = 0; i < len; i++)  
    46. {
    47.     val = arrVector[i];
    48. }
    49. //for each遍历Vector
    50. t7 = getTimer();
    51. for each(val in arrVector)
    52. {
    53.     val;
    54. }
    55. //for循环Array,length属性放for里面
    56. t8 = getTimer();
    57. for (i = 0; i < arrArray.length; i++)  
    58. {
    59.     val = arrArray[i];
    60. }
    61. //for循环Array,length属性放for外面
    62. t9 = getTimer();
    63. len = arrArray.length;
    64. for (i = 0; i < len; i++)  
    65. {
    66.     val = arrArray[i];
    67. }
    68. t10 = getTimer();

    69. trace("1:" + (t2-t1));//288
    70. trace("2:" + (t3-t2));//1974
    71. trace("3:" + (t4-t3));//67
    72. trace("4:" + (t5-t4));//50
    73. trace("5:" + (t6-t5));//44
    74. trace("6:" + (t7-t6));//42
    75. trace("7:" + (t8-t7));//52
    76. trace("8:" + (t9-t8));//70
    77. trace("9:" + (t10-t9));//46
    复制代码

    可以看出for遍历object获得key,然后再用obj[key]获得value的方式性能是最低的!

    用Vector,然后把length提前赋值出来,再for循环是最快的!

    补充:根据这篇文章(jacksondunstan.com/articles/2514)的测试结果,在使用for in循环时,不指定key的类型,比定义string类型的key,快5倍:

    1. // 慢!
    2. for (var str:String in obj)
    3. {
    4. }
    5.   
    6. // 比上面那种方式快 5 倍!
    7. for (var key:* in obj)
    8. {
    9. }
    复制代码
    作者:YoYo,原文地址:http://yoyo.play175.com/p/202.html


    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2020-2-23 08:31 , Processed in 0.078797 second(s), 45 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表