在读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的性能要好于“+”有什么依据,请高手指教。