javascript string优化问题

很久没写了。

今天看到一个很久的帖子说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

ie结果

array所用时间700
str连接所用时间500

ff

时间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处理速度不给力

posted @ 2011-07-31 17:07  永无霾  阅读(278)  评论(0编辑  收藏  举报