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用于查询操作的实现代码
May 10 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
Nov 19 Javascript
使用jQuery获得内容以及内容的属性
Feb 26 Javascript
js控制网页前进和后退的方法
Jun 08 Javascript
C#中使用迭代器处理等待任务
Jul 13 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
Dec 31 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
Jan 19 Javascript
Node.js DES加密的简单实现
Jul 07 Javascript
JS中Object对象的原型概念基础
Jan 29 Javascript
bootstrap中的导航条实例代码详解
May 20 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
May 16 Javascript
element 动态合并表格的步骤
Dec 31 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 常用函数库和一些实用小技巧
2009/01/01 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
PHP实现正则匹配所有括号中的内容
2018/06/22 PHP
基于jquery的cookie的用法
2011/01/10 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
javascript事件模型介绍
2016/05/31 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
机器学习实战之knn算法pandas
2019/06/22 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
Python将字典转换为XML的方法
2020/08/01 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
error和exception有什么区别
2012/10/02 面试题
运动会100米解说词
2014/01/23 职场文书
自荐信写法介绍
2014/01/25 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
小学生成绩单评语
2014/12/31 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
python中pymysql包操作数据库方法
2022/04/19 Python