数组方法解决JS字符串连接性能问题有争议


Posted in Javascript onJanuary 12, 2011

1、传统上,字符串连接一直是js中性能最低的操作之一。
var text="Hello";
text+=" World!";
早期浏览器没有对这种运算进行优化。
由于字符串是不可变的,这意味着要创建中间字符串来存储连接的结果。频繁地在后台创建和销毁字符串导制性能异常低下。
2、发现这一点后,开发者们利用数组对象进行优化。
var buffer=[],i=0;
buffer[i++]="Hello";//通过相应索引值添加元素比push方法快
buffer[i++]=" World!";
var text=buffer.join("");
在早期的浏览器中,没有创建和销毁中间字符串,在大量字符串连接情况下,这技术已被证明远快于使用加法方式。
3、如今浏览器对字符串的优化已经改变了字符串相连的局面。
Safari、Opera、Chrome、Firefox和IE8都在使用加法运算符上表现出了更好的性能。但是,IE8之前的版本没有优化,因此数组方法依然有效。
这并不意味着字符串相连时我们要进行浏览器检测。在决定如何连接时要考虑的是字符串的大小和数量。
1)当字符串相对较小(<20字符)且连接数量也较小时(<1000个),所有的浏览器使用加法运算符都能在不到1豪秒内轻松完成连接。
2)增加字符串数量或大小时,IE7中性能会明显下降。
3)字符串大小增加时,Firefox中加法运算符和数组成技巧性能差异会变小。
4)字符串数量增加时,Safari中加法运算符和数组成技巧性能差异会变小。
5)改变字符串数量或大小时,Chrome和Opera中加法运算符一直保持领先优势。
所以,由于在各浏览器下性能不一致,选用技术取决于实际情况和面对的浏览器。
大多数情况下,加法运算符是首选;如果用户主要使用IE6或7,并且字符串大小较大或数量较多时,那么数组技术就很值得。

Javascript 相关文章推荐
javascript 写类方式之七
Jul 05 Javascript
自己的js工具 Cookie 封装
Aug 21 Javascript
juqery 学习之六 CSS--css、位置、宽高
Feb 11 Javascript
新发现一个骗链接的方法(js读取cookies)
Jan 11 Javascript
js限制文本框的输入内容代码分享(3类)
Aug 20 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
Aug 24 Javascript
jquery分隔Url的param方法(推荐)
May 25 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
Jan 10 Javascript
详解处理bootstrap4不支持远程静态框问题
Jul 20 Javascript
JavaScript学习笔记之DOM操作实例分析
Jan 08 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
Jan 27 Javascript
nuxt.js写项目时增加错误提示页面操作
Nov 05 Javascript
js对数字的格式化使用说明
Jan 12 #Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
Jan 12 #Javascript
克隆javascript对象的三个方法小结
Jan 12 #Javascript
JavaScript中两种链式调用实现代码
Jan 12 #Javascript
Chrome中JSON.parse的特殊实现
Jan 12 #Javascript
js中将字符串转换成json的三种方式
Jan 12 #Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
Jan 12 #Javascript
You might like
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
关于php中一些字符串总结
2016/05/05 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
vue实现pdf文档在线预览功能
2019/11/26 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
在Python中使用Neo4j的方法
2019/03/14 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
python with (as)语句实例详解
2020/02/04 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
python 两种方法删除空文件夹
2020/09/29 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
英国在线泳装店:Simply Swim
2019/05/05 全球购物
公司部门司机岗位职责
2014/01/03 职场文书
高中英语教学反思
2014/02/04 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
平面设计师岗位职责
2014/09/18 职场文书
骨干教师申报材料
2014/12/17 职场文书
班主任工作总结范文
2015/08/13 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
Python 数据可视化工具 Pyecharts 安装及应用
2022/04/20 Python