javascript运用-实现StringBuffer(附性能测试)

javascript应用---实现StringBuffer(附性能测试)ECMAScript的字符串是不可变的,传统的字符串连接性能特别

javascript应用---实现StringBuffer(附性能测试)

ECMAScript的字符串是不可变的,传统的字符串连接性能特别差:

var str = "hello";str += "world";

?这段代码在幕后执行的步骤如下:

<script type="text/javascript">function StringBuffer(){this.string = new Array; //创建Array对象存储字符串}StringBuffer.prototype.append = function(str){ //把参数str附加到字符串数组this.string .push(str);}StringBuffer.prototype.toString = function(){ //用join方法返回真正的字符串this.string.join("");}</script>

?

性能测试代码:

<SCRIPT LANGUAGE="JavaScript">  var date1 = new Date();  var str = "";  for(i = 0; i<10000; i++){str += "nomad";  }  var date2 = new Date();  alert(date2.getTime() - date1.getTime());//getTime()日期的毫秒表示  date1 = new Date();  var strBuffer = new StringBuffer();  for(i = 0; i<10000;i++){strBuffer.append("nomad");  }  var result = strBuffer.toString();  date2=new Date();  alert(date2.getTime()-date1.getTime());  </SCRIPT>

?奇怪的事情出现了:

IE下:输出282? 和 79

FF下:输出15 和 63

截然相反!!!

?

原因是FF的JS引擎已经对字符串的拼接运算“+”做了特别优化

?

StringBuffer.prototype.toString = function(){ //用join方法返回真正的字符串 this.string.join(""); }

有问题哦StringBuffer.prototype.append = function(str){ //把参数str附加到字符串数组 this.string .push(str); } alert(new StringBuffer());StringBuffer.prototype.toString = function(){ //用join方法返回真正的字符串 this.string.join(""); }alert(new StringBuffer());

第一个弹出是对象,第二个是未定义
</script>

测试结果:
IE6:
数组连接方式用时:79
字符使用+号连接方式用时:5578

firefox3:
数组连接方式用时:12
字符使用+号连接方式用时:16

差距,挨。。。看来我也得升级IE了。 6 楼 biaowen 2008-06-21   不好意思,地一次帖代码,不记得用代码模式帖出来,呵呵,看起来有点乱。