javascript string字符串优化问题
更新时间:2011年07月31日 20:59:38 作者:
今天看到一个很久的帖子说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
array所用时间17
str连接所用时间100
去查查jion的机制再写吧。
ps:浏览器版本
google12.0.742.122
ff5.0.1
opera11.50
ie8.0.6001.18702
pss:ie处理速度不给力
相关文章
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
下面小编就为大家带来一篇基于Bootstrap模态对话框只加载一次 remote 数据的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-07-07判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
这篇文章主要介绍了判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-04-04javascript中的parseInt和parseFloat区别
这篇文章用简单的小例子演示了parseInt和parseFloat区别,有需要的朋友可以参考一下2013-07-07window.onbeforeunload方法在IE下无法正常工作的解决办法
下面的代码可以做到不管用户是点击了关闭,或者是在任务栏关闭、点击后退、刷新、按F5键,都可以检测到用户即将离开的消息。2010-01-01完美解决input[type=number]无法显示非数字字符的问题
下面小编就为大家带来一篇完美解决input[type=number]无法显示非数字字符的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-02-02
最新评论