A JavaScript Fancier

伟大的javascript技术研究中...

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  304 随笔 :: 0 文章 :: 479 评论 :: 0 Trackbacks
<2025年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

公告

本blog为作者本人学习JS脚本所用,未经特别声明,本站所有文章均属作者本人原创,请转载时注明来源!谢谢合作!同时希望与各位javascript爱好者交流学习。MSN:yanwei8410@hotmail.com

常用链接

留言簿(26)

随笔分类

随笔档案

Ajax技术站点

javascript学习站点

JS高人Blog

Ruby&&Ajax框架

Web技术站点

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

在做大字符串连接时,常用 += 来连接字符串,但这种连接符的效率随着字符串的增大迅速降低,比如下面输出1000个5行5列的表格:

<script>
var d1 = new Date();
var str = "";
for (i=0; i<1000; i++){
 str 
+= "<table width="300" border="1" cellpadding="5" cellspacing="1"> <tr> <td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr><tr><td>11</td><td>22</td>
<td>33</td><td>44</td><td>55</td></tr><tr><td>111</td><td>222</td><td>333</td>
<td>444</td><td>555</td></tr><tr><td>1111</td><td>2222</td><td>3333</td><td>4444</td>
<td>5555</td></tr><tr><td>11111</td><td>22222</td><td>33333</td><td>44444</td>
<td>55555</td></tr></table>
"
}
document.write(str)
var d2 = new Date();
alert(d2
-d1);
</script>
我的硬件配置使用 +=的连接办法约需要1950毫秒。

在前面几篇日志已经证明到,大字符串的连接最好使用数组,把每个子串放入数组元素,再执行join()连接起来,其效率比+=有明显的提高。

因此,可以由此原理写一个简单的 StringBuffer 类,在遇到大字符串连接时可以派上用场。

function StringBuffer(){
this.data = [];
}
StringBuffer.prototype.append 
= function(){
this.data.push(arguments[0]);
return this;
}
StringBuffer.prototype.toString 
= function(){
return this.data.join("");
}


代码很简单,再应用到上面的例子,看看执行时间要多少:
<script>
function StringBuffer(){
 
this.data = [];
}
StringBuffer.prototype.append 
= function(){
 
this.data.push(arguments[0]); 
}
StringBuffer.prototype.toString 
= function(){
 
return this.data.join("");
}
var d1 = new Date();
var a = new StringBuffer();
for (i=0; i<1000; i++){
 a.append(
"<table width="300" border="1" cellpadding="5" cellspacing="1"> <tr> <td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr><tr><td>11</td><td>22</td>
<td>33</td><td>44</td><td>55</td></tr><tr><td>111</td><td>222</td><td>333</td>
<td>444</td><td>555</td></tr><tr><td>1111</td><td>2222</td><td>3333</td><td>4444</td>
<td>5555</td></tr><tr><td>11111</td><td>22222</td><td>33333</td><td>44444</td>
<td>55555</td></tr></table>
");

 

document.write(a.toString())

var d2 = new Date();
alert(d2
-d1);
</script>
结果是耗时431毫秒,是+=连接方法效率的4~5倍。
posted on 2007-07-04 08:41 Yemoo'S JS Blog 阅读(1058) 评论(0)  编辑 收藏 引用 所属分类: javascript技巧总结
只有注册用户登录后才能发表评论。
51La