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 相关文章推荐
javascript CSS画图之基础篇
Jul 29 Javascript
Angular用来控制元素的展示与否的原生指令介绍
Jan 07 Javascript
jquery仿百度经验滑动切换浏览效果
Apr 14 Javascript
JS获取图片高度宽度的方法分享
Apr 17 Javascript
jQuery构造函数init参数分析续
May 13 Javascript
JavaScript的this关键字的理解
Jun 18 Javascript
js Canvas实现圆形时钟教程
Sep 19 Javascript
Vue.js组件使用开发实例教程
Nov 01 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
Jul 07 Javascript
JavaScript实现简单轮播图效果
Dec 01 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
Jan 28 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
Nov 04 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
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
2013/07/05 PHP
微信支付开发发货通知实例
2016/07/12 PHP
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
javascript的this关键字详解
2019/05/20 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
python基于twisted框架编写简单聊天室
2018/01/02 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
用python爬取租房网站信息的代码
2018/12/14 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
python GUI计算器的实现
2020/10/09 Python
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
波兰购物网站:MALL.PL
2019/05/01 全球购物
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
员工培训邀请函
2014/02/02 职场文书
李培根演讲稿
2014/05/22 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
行风评议整改报告
2014/11/06 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
酒桌上的祝酒词
2015/08/12 职场文书