JavaScript 字符串连接性能优化


Posted in Javascript onDecember 20, 2008
var str = "hello"; 
str += " world";

后台所做工作:
1)创建存储 "hello" 的字符串,且使 str 指向它。
2)创建存储 "world" 的字符串。
3)创建存储结果的字符串。
4)将 str 中的当前内容复制到结果字符串中。
5)把 world 复制到结果字符串中。
6)更新 str ,使 str 指向结果字符串。
每拼接一次字符串就循环重复2)~6),如果重复成百上千次则会非常消耗资源,影响性能。
解决方法:
使用 Array 对象存储字符串,之后使用 join()方法输出结果。
仿照 Java 中的 StringBuffer 类。
function StringBuffer(){ 
this._strings = new Array; 
} 
StringBuffer.prototype.append = function (str){ 
this._strings.push(str); 
} 
StringBuffer.prototype.toString = function (){ 
return this._strings.join(""); 
}

测试性能:
代码1:使用 "+=" 拼接字符串
var d = new Date(); 
var str = ""; 
for(var i=0;i<10000;i++){ 
str += "test"; 
} 
var d2 = new Date(); 
document.writeln(d2.getTime()-d.getTime());

代码2:使用 StringBuffer
var d = new Date(); 
var str = new StringBuffer(); 
for(var i=0;i<10000;i++){ 
str.append("test"); 
} 
var res = str.toString(); 
var d2 = new Date(); 
document.writeln(d2.getTime()-d.getTime());

从多次测试结果看来,使用StringBuffer 可以节省50%以上的时间。
Javascript 相关文章推荐
jQuery 1.3 和 Validation 验证插件1.5.1
Jul 09 Javascript
Javascript学习笔记4 Eval函数
Jan 11 Javascript
iframe的onreadystatechange事件在firefox下的使用
Apr 16 Javascript
JS实现适合于后台使用的动画折叠菜单效果
Sep 21 Javascript
JavaScript中Promise的使用详解
Feb 26 Javascript
jsonp跨域请求实现示例
Mar 13 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
Jun 13 Javascript
教你5分钟学会用requirejs(必看篇)
Jul 25 Javascript
详解关于vue2.0工程发布上线操作步骤
Sep 27 Javascript
详解Vue 动态组件与全局事件绑定总结
Nov 11 Javascript
js图片无缝滚动插件使用详解
May 26 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
Nov 02 Javascript
js一组验证函数
Dec 20 #Javascript
flash javascript之间的通讯方法小结
Dec 20 #Javascript
javascript this用法小结
Dec 19 #Javascript
js 提交和设置表单的值
Dec 19 #Javascript
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
Dec 19 #Javascript
简单通用的JS滑动门代码
Dec 19 #Javascript
比较全的JS checkbox全选、取消全选、删除功能代码
Dec 19 #Javascript
You might like
MYSQL环境变量设置方法
2007/01/15 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
深入php内核之php in array
2015/11/10 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
JS自调用匿名函数具体实现
2014/02/11 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
基于javascript实现九宫格大转盘效果
2020/05/28 Javascript
Javascript之String对象详解
2016/06/08 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
python中ConfigParse模块的用法
2014/09/29 Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
2015/04/25 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
python如何对链表操作
2020/10/10 Python
HTML5 Canvas基本线条绘制的实例教程
2016/03/17 HTML / CSS
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
商务考察邀请函范文
2014/01/21 职场文书
三孔导游词
2015/02/05 职场文书
2015新学期开学寄语
2015/02/26 职场文书
演讲开场白台词大全
2015/05/29 职场文书
护士医德医风心得体会
2016/01/25 职场文书