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 相关文章推荐
js onclick事件传参讲解
Nov 06 Javascript
Javascript 构造函数详解
Oct 22 Javascript
ionic实现可滑动的tab选项卡切换效果
Apr 15 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
Jan 17 Javascript
jquery实现页面加载效果
Feb 21 Javascript
vue中mint-ui环境搭建详细介绍
Apr 06 Javascript
Vue中Quill富文本编辑器的使用教程
Sep 21 Javascript
学习使用ExpressJS 4.0中的新Router的用法
Nov 06 Javascript
uni-app实现点赞评论功能
Nov 25 Javascript
vue基于better-scroll实现左右联动滑动页面
Jun 30 Javascript
解决vant title-active-color与title-inactive-color不生效问题
Nov 03 Javascript
用JS实现飞机大战小游戏
Jun 09 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更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
python使用json序列化datetime类型实例解析
2018/02/11 Python
python 构造三维全零数组的方法
2018/11/12 Python
Python中extend和append的区别讲解
2019/01/24 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
Python json读写方式和字典相互转化
2020/04/18 Python
Python类及获取对象属性方法解析
2020/06/15 Python
Python包和模块的分发详细介绍
2020/06/19 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
六一儿童节活动总结
2014/08/27 职场文书
应届毕业生自荐信
2015/03/04 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
政协工作总结2015
2015/05/20 职场文书
五年级作文之想象作文
2019/10/30 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS