首先说明,这里不是测试String+操作和用StringBuffer进行字符串+的性能区别。测试环境为IE6+sp2。
下面的测试函数在页面中没有包含任何其他脚本 文件时的执行时间为15毫秒,而当页面中引用一些无关的脚本的文件时(引用了10多个其他脚本文件,都跟这段代码无关),执行时间变为400+毫秒,如果减少几个脚本的引用,则执行时间也相应减少一些。测试代码:
function doXmlFetchTest(){
var str = "<?xml version=/"1.0/" encoding=/"GBK/"?><qsxml><result><item name=/"exp/" text=/"1000420-5116/" value=/"/">";
var i;
for (i = 0; i < 1000; i ++){
str += "<option text=/"1000420-5119/" value=/"/"/>";
}
str += "</item></result></qsxml>";
}
但把此函数的实现改为如下方式:
function doXmlFetchTest(){
var buffer=new xxxx.sys.StringBuffer();
buffer.append('<?xml version=/"1.0/" encoding=/"GBK/"?><qsxml><result><item name=/"exp/" text=/"1000420-5116/" value=/"/">');
var i;
for (i = 0; i < 1000; i ++){
buffer.append('<option text=/"1000420-5119/" value=/"/"/>');
}
buffer.append("</item></result></qsxml>");
}
则无论引用多少其他脚本文件执行时间都是15毫秒左右。xxxx.sys.StringBuffer为用数组实现的一个Buffer类,xxxx为原为具体的名称空间,此处不用真实的。
为什么脚本文件(*.js)引用的多少(内容也多)会引起第一种写法的性能下降,欢迎大家讨论。