在讀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>
測試結果:
Concatenation with plus:31milliseconds
Concatenation with StringBuffer:78milliseconds
不知道問題出在哪裡?