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 基础篇1 什么是js 建立第一个js程序
Mar 14 Javascript
javascript倒计时功能实现代码
Jun 07 Javascript
javascript匀速动画和缓冲动画详解
Oct 20 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
Nov 30 Javascript
使用Bootrap和Vue实现仿百度搜索功能
Oct 26 Javascript
浅谈mint-ui 填坑之路
Nov 06 Javascript
vue基础之事件v-onclick=&quot;函数&quot;用法示例
Mar 11 Javascript
如何为你的JavaScript代码日志着色详解
Apr 08 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
Aug 08 Javascript
jQuery HTML获取内容和属性操作实例分析
May 20 jQuery
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
Aug 03 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
Oct 21 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传输数据的代码
2007/11/13 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
清除div下面的所有标签的方法
2014/02/17 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
使用axios实现上传图片进度条功能
2017/12/21 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
Python 文件和输入输出小结
2013/10/09 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
python3爬虫之设计签名小程序
2018/06/19 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
python实现多进程通信实例分析
2019/09/01 Python
python实现从wind导入数据
2019/12/03 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
python程序需要编译吗
2020/06/19 Python
医生自荐信
2013/10/11 职场文书
高中毕业生自我鉴定
2013/11/03 职场文书
大学生职业生涯规划书前言
2014/01/09 职场文书
运动会广播稿200米
2014/01/27 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python