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抖动元素的小例子
Oct 28 Javascript
php中给js数组赋值方法
Mar 10 Javascript
javascript中return,return true,return false三者的用法及区别
Nov 17 Javascript
JS延时器提示框的应用实例代码解析
Apr 27 Javascript
实用jquery操作表单元素的简单代码
Jul 04 Javascript
ionic2 tabs使用 Modal底部tab弹出框
Dec 30 Javascript
javascript表达式和运算符详解
Feb 07 Javascript
php register_shutdown_function函数详解
Jul 23 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 jQuery
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
Jan 25 Javascript
Element UI 自定义正则表达式验证方法
Sep 04 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
Oct 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
MVC模式的PHP实现
2006/10/09 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
PDO::inTransaction讲解
2019/01/28 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
js 多浏览器分别判断代码
2010/04/01 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
JQuery实现超链接鼠标提示效果的方法
2015/06/10 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
Vuejs实现带样式的单文件组件新方法
2017/05/02 Javascript
vue内置指令详解
2018/04/03 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
Python简单实现子网掩码转换的方法
2016/04/13 Python
python 上下文管理器使用方法小结
2017/10/10 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
Python单元和文档测试实例详解
2019/04/11 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
python脚本开机自启的实现方法
2019/06/28 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
平面设计自荐信
2013/10/07 职场文书
简短大学毕业感言
2014/01/18 职场文书
企业车辆管理制度
2014/01/24 职场文书
元宵节主持词
2014/03/25 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang