js中StringBuffer的效率问题

        在读JavaScript高级程序设计这本书,试验了一个StringBuffer的效率问题,书中提到StringBuffer的效率要比str+的方式节省50~66%的时间,但是实际的测试结果却不是,代码如下:

<script type="text/javascript">
 $(document).ready(function ()
 {
  var d1 = new Date();
  var str = "";
  for (var i = 0; i < 50000; i++)
  {
   str += "text";
  }
  var d2 = new Date();
  document.write("Concatenation with plus:" + (d2.getTime() - d1.getTime()) + "milliseconds");


  var buffer = new StringBuffer();
  d1 = new Date();
  for (var j = 0; j < 50000; j++)
  {
   buffer.append("text");
  }
  var result = buffer.toString();
  d2 = new Date();
  document.write("<br />Concatenation with StringBuffer:" + (d2.getTime() - d1.getTime()) + "milliseconds");

 })

 function StringBuffer()
 {
  this._strings = new Array;
 }
 StringBuffer.prototype.append = function (str)
 {
  this._strings.push(str);
 }
 StringBuffer.prototype.toString = function ()
 {
  return this._strings.join("");
 }

</script>

 

测试结果:

IE8:

Concatenation with plus:31milliseconds
Concatenation with StringBuffer:78milliseconds

IE9:

Concatenation with plus:13milliseconds
Concatenation with StringBuffer:48milliseconds

Chrome:

Concatenation with plus:2milliseconds
Concatenation with StringBuffer:4milliseconds

 

数据量*10

IE9:

Concatenation with plus:140milliseconds
Concatenation with StringBuffer:513milliseconds

IE11:

Concatenation with plus:261milliseconds
Concatenation with StringBuffer:252milliseconds

Chrome:

Concatenation with plus:44milliseconds
Concatenation with StringBuffer:125milliseconds

 

不知道问题出在哪里?

1、IE:效率基本保持一致,都是“+”的效率明显好于StringBuffer

2、Chrome:刷新多次结果会变化,又增加了数据的数量级进行了测试,结果是大部分状况是“+”性能好于StringBuffer;另外我们可以明显看出Chrome性能明显好于IE。

3、数据量加大后,Chrome表现还是很抢眼,IE11鼓吹性能很好,但是结果却不尽如人意,可能与虚拟机打开有一定关系。

 

所以从以上的结果来看,书中所说的StringBuffer的性能要好于“+”有什么依据,请高手指教。

你可能感兴趣的:(js中StringBuffer的效率问题)