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 回车事件实现代码
Aug 23 Javascript
网页前端优化之滚动延时加载图片示例
Jul 13 Javascript
适用于javascript开发者的Processing.js入门教程
Feb 24 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
Jun 15 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
Aug 10 Javascript
WEB开发之注册页面验证码倒计时代码的实现
Dec 15 Javascript
Angular2 PrimeNG分页模块学习
Jan 14 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
Oct 25 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
Nov 06 Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 Javascript
详解mpvue中小程序自定义导航组件开发指南
Feb 11 Javascript
vue实现随机验证码功能的实例代码
Apr 30 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类
2006/10/09 PHP
php 无限级数据JSON格式及JS解析
2010/07/17 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
PHP多态代码实例
2015/06/26 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
2020/11/09 jQuery
python开启多个子进程并行运行的方法
2015/04/18 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
联想中国官方商城:Lenovo China
2017/10/18 全球购物
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
英国快时尚女装购物网站:PrettyLittleThing
2018/08/15 全球购物
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
语文教学随笔感言
2014/02/18 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
男人帮观后感
2015/06/18 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript
OpenCV实现常见的四种图像几何变换
2022/04/01 Python