问题:javascript常见的性能问题是字符串连接,跟Java语言类似,我们一般采用比较简单但是性能不优的方式,如下:
var sTemp = "Welcome ";
sTemp += " <span style="font-family: Arial, Helvetica, sans-serif;">China</span><span style="font-family: Arial, Helvetica, sans-serif;">"';</span>
这段代码在幕后执行的方法如下:
1. 创建存储 “Welcome”的字符串;
2. 创建存储“China”的字符串;
3. 创建存储结果的字符串;
4. 把“Welcome”的字符串复制到结果中;
5. 把"China"的字符串复制到结果中;
6. 更新sTemp,使它指向到结果。
每次完成字符串连接都会进行2~6的步骤,所以使用如上方法连接字符串非常浪费资源,如果执行上述操作多次会造成性能问题。
解决方案:使用Array对象存储字符串,然后用join方法创建最终字符串。
var aTemp = new Array();
aTemp[0] = "Welcome";
aTemp[1] = "China";
var sTemp = aTemp.join("");
虽然这样的方案确实可以解决性能问题。但是对比JAVA中StringBuffer这种来说,感觉还是不爽,写这么多代码,愁人,是不是我们自己封装一个这样的方法呢?
/**
* @author zhengtan
* @description 实现类似JAVA中StringBuffer连接字符串功能,提高字符串连接效率
* @example
* var sbTemp = new StringBuffer();
* sbTemp.append("Welcome");
* sbTemp.append("China");
* var sTemp = sbTemp.toString();
*/
function StringBuffer(){
this._strings_ = new Array();
}
StringBuffer.prototype.append = function(str){
this._strings_.push(str);
};
StringBuffer.prototype.toString = function(){
return this._strings_.join("");
};