javascript string字符串优化问题

复制代码 代码如下:

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

  <html>

  <head>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <title>test</title>

  <script type="text/javascript">

  function winProps(){

  var message = [];

  var str;

  var data = new Date();

  var mils1 = data.getTime();

  //array数组

  for(var i = 0; i<500000;i++)

  message.push("This window is ");

  message.join(" ");

  data = new Date();

  var mils2 = data.getTime();

  arrayMils = mils2 - mils1;

  //字符串直接连接

  for(var i = 0; i<500000;i++)

  str+="This window is ";

  data = new Date();

  var mils3 = data.getTime();

  stringMils=mils3-mils2;

  //显示内容,不重要

  var mes = [];

  mes.push("时间1:");

  mes.push(mils1);

  mes.push("\n时间2");

  mes.push(mils2);

  mes.push("\n时间3");

  mes.push(mils3);

  mes.push("\narray所用时间");

  mes.push(arrayMils>=0?arrayMils:arrayMils+1000);

  mes.push("\nstr连接所用时间");

  mes.push(stringMils>=0?stringMils:stringMils+1000);

  alert(mes.join(" "));

  }

  </script>

  </head>

  <body>

  <input type="button" value="点我" onclick="winProps();"/>

  </body>

  结果不像一般的说法,用array会快。在ie9,8。ff,google,搜狗等ie核心的浏览器下测试了一下,确实在数量级100000以上的测试中array方法比用“+”的方法会慢。

  1000000次的结果

  ie第一次(大概,ie复制不了,图就不截了)

  

复制代码 代码如下:

  array所用时间 890

  str连接所用时间 450

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

  ff

  

复制代码 代码如下:

  时间1: 1312102053720

  时间2 1312102053842

  时间3 1312102053882

  array所用时间 122

  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: 1312101715553

  时间2 1312101715622

  时间3 1312101715749

  array所用时间 69

  str连接所用时间 127

  [code]

  ie结果

  array所用时间700

  str连接所用时间500

  ff

  [code]

  时间1: 1312101925895

  时间2 1312101925945

  时间3 1312101925979

  array所用时间 50

  str连接所用时间 34

  google

  array所用时间17

  str连接所用时间100

  去查查jion的机制再写吧。

  ps:浏览器版本

  google12.0.742.122

  ff5.0.1

  opera11.50

  ie8.0.6001.18702

  pss:ie处理速度不给力