打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
javascript中字符串连接时用Array.join()替换 string = "xx",换来几十倍的速度提升

javascript中字符串连接时用Array.join()替换 string += "xx",换来几十倍的速度提升

2006-12-31 21:38by无常,6237visits,收藏,编辑
下面的二个函数compute1()和compute1(),都是将50000个字符串连接起来,
直接用+=连接耗时17547毫秒,
使用Array.join()耗时234毫秒,比前者快了近75倍!

而且使用+=操作的话,随着循环次数的增加,耗用时间是nn倍的上升,循环30000次时近60秒,
而用Array.join循环50000次才是843毫秒。

javascript的string是固定内存的,每次对字符串的修改操作都会导致重新分配内存,速度当然慢了。
c#中的string也是固定分配内存的,所以在做多字符串连接时一定要记得StringBuilder哦.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    
<title>Untitled Page</title>

</head>
<body>
    
<input id="Button1" type="button" value="直接连接"  onclick="compute1();"/>
    开始时间:
<input id="Text1" type="text" /> 结束时间:<input id="Text2" type="text" />
    耗时:
<input id="Text3" type="text" /><br />
    
<br />
    
<input id="Button2" type="button" value="StringBuilder"  onclick="compute2();"/>开始时间:<input id="Text4" type="text" />结束时间:<input id="Text5" type="text" />
    耗时:
    
<input id="Text6" type="text" />

</body>
</html>
<script language=javascript>
function compute1()
{
    
var start = new Date();
    window.document.all.Text1.value 
=start.getSeconds() * 1000 + start.getMilliseconds();
    str 
= "";
    
for( i=0; i<20000; i++)
    {
        str 
+= "wuchang@guet.edu.cn";
    }
    
var end = new Date();
    window.document.all.Text2.value 
=end.getSeconds() * 1000 + end.getMilliseconds();
    window.document.all.Text3.value 
= Number(window.document.all.Text2.value) -Number(window.document.all.Text1.value); 
    
}

function compute2()
{
    
var start = new Date();
    window.document.all.Text4.value 
=start.getSeconds() * 1000 + start.getMilliseconds();
    str 
= new StringBuilder();
    
for( i=0; i<200000; i++)
    {
        str.Append(
"wuchang@guet.edu.cn");
    }
    
var end = new Date();
    window.document.all.Text5.value 
=end.getSeconds() * 1000 + end.getMilliseconds();
    window.document.all.Text6.value 
= Number(window.document.all.Text5.value) -Number(window.document.all.Text4.value); 
    
}

function StringBuilder(str)
{
    
this.tmp = new Array();        
}
StringBuilder.prototype.Append
= function(value)
{
    
this.tmp.push(value);
    
return this;
}
StringBuilder.prototype.Clear 
= function()
{
    tmp.length
=1;
}
StringBuilder.prototype.toString 
= function()
{
    
return this.tmp.join('');
}

</script>
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
事半功倍之Javascript(简洁教程)
[精] javascript
几种字符串反转方法效率比较
jQuery的学习
jquery.serializeJSON抓取数据
javascript
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服