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和HTML5利用canvas构建猜牌游戏实现算法
Jul 17 Javascript
浅析Javascript中“==”与“===”的区别
Dec 23 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
Feb 26 Javascript
js带前后翻页的图片切换效果代码分享
Sep 08 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
Jun 12 Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 Javascript
详细谈谈AngularJS的子级作用域问题
Sep 05 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
Dec 26 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
May 25 Javascript
JS实现数组的增删改查操作示例
Aug 29 Javascript
解决Antd Table表头加Icon和气泡提示的坑
Nov 17 Javascript
插件导致ECharts被全量引入的坑示例解析
Sep 23 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读取IMAP邮件
2006/10/09 PHP
PHP源码之 ext/mysql扩展部分
2009/07/17 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
WAF的正确bypass
2017/01/05 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
写给小白看的JavaScript异步
2017/11/29 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
基于python神经卷积网络的人脸识别
2018/05/24 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
Python的高阶函数用法实例分析
2019/04/11 Python
python中对数据进行各种排序的方法
2019/07/02 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
《临死前的严监生》教学反思
2014/02/13 职场文书
民事调解书范文
2015/05/20 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
Vue全家桶入门基础教程
2021/05/14 Vue.js
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs