javascript字符串连接性能提升
2015-10-22 16:09
856 查看
问题:javascript常见的性能问题是字符串连接,跟Java语言类似,我们一般采用比较简单但是性能不优的方式,如下:
这段代码在幕后执行的方法如下:
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("");
};
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("");
};
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- IE8开发人员工具教程(二)
- 在flex中执行一个javascript方法的简单方式
- Flex结合JavaScript读取本地路径的方法
- PowerShell中执行Javascript的方法示例
- javascript asp教程第六课-- response方法
- javascript asp教程More About Recordsets