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 获取所有id中包含某关键字的控件的实现代码
Nov 25 Javascript
利用毫秒减值计算时长的js代码
Sep 22 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
May 13 Javascript
jQuery实现友好的轮播图片特效
Jan 12 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
May 12 Javascript
JavaScript日期选择功能示例
Jan 16 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
Feb 15 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
Jun 19 Javascript
浅谈Vue render函数在ElementUi中的应用
Sep 06 Javascript
详解Vue组件之作用域插槽
Nov 22 Javascript
node之本地服务器图片上传的方法示例
Mar 26 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
yii数据库的查询方法
2015/12/28 PHP
php四种定界符详解
2017/02/16 PHP
js 回车提交表单两种实现方法
2012/12/31 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
Augularjs-起步详解
2016/07/08 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
Vue实现手机计算器
2020/08/17 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
java判断三位数的实例讲解
2019/06/10 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
Python实现扫码工具的示例代码
2020/10/09 Python
Python字典实现伪切片功能
2020/10/28 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis
Python列表的索引与切片
2022/04/07 Python