本文通过实际代码测试对比了JavaScript中原生String拼接与自定义StringBuffer类的性能差异。结果显示,在现代浏览器如IE8中,原生String因引擎优化速度优于StringBuffer;而在较老的IE7中,StringBuffer仍具优势。文章提供了完整的测试用例与实现代码,帮助开发者根据目标浏览器选择合适的字符串处理方案。
JavaScript中StringBuffer的自定义实现
在JavaScript原生环境中,并不存在内置的StringBuffer类。为了模拟类似Java中的字符串缓冲区功能,一种常见的做法是通过prototype属性来构造一个自定义的StringBuffer类。
StringBuffer.js
具体的实现代码如下:
function StringBuffer(){
this.content = new Array;
}
StringBuffer.prototype.append = function( str ){
this.content.push( str );
}
StringBuffer.prototype.toString = function(){
return this.content.join("");
} 性能测试用例与结果分析
接下来,我们编写一个测试用例来验证上述实现的性能表现:
TestStringBUffer.html
HTML测试页面代码如下:
<html>
<head>
<title>test</title>
<script type="text/javascript“ language="javascript" src="StringBuffer.js"></script>
<script>
function testStringBuffer(){
var date1 = new Date();
var str;
for( var i=0; i<10000; i++){
str += "text";
}
var date2 = new Date();
document.writeln("Sting use time:"+ (date2 - date1) +"ms");
var date3 = new Date();
var strBuffer = new StringBuffer();
for(i=0; i<10000; i++){
strBuffer.append("text");
}
strBuffer.toString();
var date4 = new Date();
document.writeln("<br/>StringBuffer use time:"+ (date4 - date3) +"ms");
}
</script>
</head>
<body>
<input type="button" value="testStringBuffer" onclick="testStringBuffer()"/>
</body>
</html> 运行上述测试代码,观察不同浏览器下的执行结果:
在IE8浏览器中:
Sting use time:11ms
StringBuffer use time:47ms
测试结果表明,在IE8中,StringBuffer不仅没有提升效率,反而比原生String慢了数倍。这是否意味着之前的观点有误?
让我们进一步在其他浏览器中进行对比测试:
在IE7浏览器中:
Sting use time:266ms
StringBuffer use time:78ms
在IE7环境下,StringBuffer的性能优势十分显著。
由此可见,现代主流浏览器(如IE8)对原生String类的字符串连接操作进行了底层优化,使得其性能优于自定义的StringBuffer类。然而,在较老的浏览器(如IE7)中,StringBuffer类的优势依然明显。因此,在实际开发中,需要根据目标浏览器的版本来判断是否使用StringBuffer进行优化。