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 相关文章推荐
基础的prototype.js常用函数及其用法
Mar 10 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
Jan 20 Javascript
早该知道的7个JavaScript技巧
Mar 27 Javascript
$(document).ready(function() {})不执行初始化脚本
Jun 19 Javascript
js选择并转移导航菜单示例代码
Aug 19 Javascript
JavaScript设计模式之策略模式实例
Oct 10 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
May 23 Javascript
学习Javascript闭包(Closure)知识
Aug 07 Javascript
详解ES6系列之私有变量的实现
Nov 21 Javascript
vue spa应用中的路由缓存问题与解决方案
May 31 Javascript
微信小程序实现下滑到底部自动翻页功能
Mar 07 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
Jun 25 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 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
Python数据可视化之画图
2019/01/15 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
python爬虫中PhantomJS加载页面的实例方法
2020/11/12 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
优秀志愿者事迹材料
2014/02/03 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
2015年幼师工作总结
2015/04/28 职场文书
英语投诉信范文
2015/07/03 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
《比的意义》教学反思
2016/02/18 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android