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 相关文章推荐
使用jQuery简化Ajax开发 Ajax开发入门
Oct 14 Javascript
js 字符串转化成数字的代码
Jun 29 Javascript
JQuery异步加载无限下拉框级联功能实现示例
Feb 19 Javascript
jquery实现效果比较好的table选中行颜色
Mar 25 Javascript
jquery操作checked属性以及disabled属性的多种方法
Jun 20 Javascript
jQuery中after()方法用法实例
Dec 25 Javascript
JavaScript生成福利彩票双色球号码
May 15 Javascript
javascript新闻跑马灯实例代码
Jul 29 Javascript
JS运动相关知识点小结(附弹性运动示例)
Jan 08 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
Mar 30 Javascript
探究react-native 源码的图片缓存问题
Aug 24 Javascript
JS对日期操作封装代码实例
Nov 08 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
thinkphp的c方法使用示例
2014/02/24 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
浅谈PHP进程管理
2019/03/08 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
2015/11/25 Javascript
input框中的name和id的区别
2016/11/16 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python实现购物车功能的方法分析
2017/11/10 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
工艺工程师工作职责
2013/11/23 职场文书
矿泉水广告词
2014/03/20 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
产品售后服务承诺书
2014/05/21 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python