Discuz教程网

javascript string字符串优化问题

[复制链接]
authicon dly 发表于 2011-9-16 08:20:19 | 显示全部楼层 |阅读模式

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>test</title>
  6. <script type="text/javascript">
  7. function winProps(){
  8. var message = [];
  9. var str;
  10. var data = new Date();
  11. var mils1 = data.getTime();
  12. //array数组
  13. for(var i = 0; i<500000;i++)
  14. message.push("This window is ");
  15. message.join(" ");
  16. data = new Date();
  17. var mils2 = data.getTime();
  18. arrayMils = mils2 - mils1;
  19. //字符串直接连接
  20. for(var i = 0; i<500000;i++)
  21. str+="This window is ";
  22. data = new Date();
  23. var mils3 = data.getTime();
  24. stringMils=mils3-mils2;
  25. //显示内容,不重要
  26. var mes = [];
  27. mes.push("时间1:");
  28. mes.push(mils1);
  29. mes.push("\n时间2");
  30. mes.push(mils2);
  31. mes.push("\n时间3");
  32. mes.push(mils3);
  33. mes.push("\narray所用时间");
  34. mes.push(arrayMils>=0?arrayMils:arrayMils+1000);
  35. mes.push("\nstr连接所用时间");
  36. mes.push(stringMils>=0?stringMils:stringMils+1000);
  37. alert(mes.join(" "));
  38. }
  39. </script>
  40. </head>
  41. <body>
  42. <input type="button" value="点我"/>
  43. </body>
复制代码

结果不像一般的说法,用array会快。在ie9,8。ff,google,搜狗等ie核心的浏览器下测试了一下,确实在数量级100000以上的测试中array方法比用“+”的方法会慢。
1000000次的结果
ie第一次(大概,ie复制不了,图就不截了)
  1. array所用时间 890
  2. str连接所用时间 450
复制代码

ie可能是内存没有回收第二次点会弹出警告,并且时间用到1400和1200,点多几次后,+=的连接方式耗时回到400,难倒是array对象没有回收?打开任务管理器,再刷新一次ie浏览器,内存降了100多m,应该研究一下ie的javascript内存回收机制。
ff
  1. 时间1: 1312102053720
  2. 时间2 1312102053842
  3. 时间3 1312102053882
  4. array所用时间 122
  5. str连接所用时间 40
复制代码

google(也复制不了数据)
array所用时间 200
str连接所用时间 100
opera
时间1: 1312102258270
时间2 1312102258460
时间3 1312102258592
array所用时间 190
str连接所用时间 132
顺便说一下,在数据到5000000后ff抛出了个异常,应该是内存溢出了。。。(ps,不是很懂)
错误: uncaught exception: 8.375396749959738e-274
在ie下测试果断警告,再后来out of memory。
当然怎么大的数据连接,在现在的网页是不可能出现,数据处理应该是在后台做的。老师的主机不敢装这么多浏览器
其实是array的jion,太消耗时间。没有加入这一句之后opera,google就显示出array的优势:
opera结果:
  1. 时间1: 1312101715553
  2. 时间2 1312101715622
  3. 时间3 1312101715749
  4. array所用时间 69
  5. str连接所用时间 127
  6. [code]
  7. ie结果
  8. array所用时间700
  9. str连接所用时间500
  10. ff
  11. [code]
  12. 时间1: 1312101925895
  13. 时间2 1312101925945
  14. 时间3 1312101925979
  15. array所用时间 50
  16. str连接所用时间 34
复制代码

google
array所用时间17
str连接所用时间100
去查查jion的机制再写吧。
ps:浏览器版本
google12.0.742.122
ff5.0.1
opera11.50
ie8.0.6001.18702
pss:ie处理速度不给力



上一篇:javascript中length属性的探索
下一篇:基于JQuery 的消息提示框效果代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 07:21

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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