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 Ajax的Get方式时需要注意URL地方
Apr 07 Javascript
浏览器解析js生成的html出现样式问题的解决方法
Apr 16 Javascript
js检查页面上有无重复id的实现代码
Jul 17 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
Dec 26 Javascript
JS对象转换为Jquery对象实现代码
Dec 29 Javascript
js防止DIV布局滚动时闪动的解决方法
Oct 30 Javascript
escape函数解决js中ajax传递中文出现乱码问题
Oct 30 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
Jun 11 Javascript
JavaScript实现简单的tab选项卡切换
Jan 05 Javascript
第七章之菜单按钮图标组件
Apr 25 Javascript
JS+CSS3模拟溢出滚动效果
Aug 12 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
Sep 01 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开发中常用的字符串操作函数
2011/02/08 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
python带参数打包exe及调用方式
2019/12/21 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
外国语学院毕业生自荐信
2013/10/28 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
检讨书怎么写
2015/05/07 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书