数组方法解决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 相关文章推荐
网页前台通过js非法字符过滤代码(骂人的话等等)
May 26 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
Mar 14 Javascript
JavaScript词法作用域与调用对象深入理解
Nov 29 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
May 07 Javascript
jquery的选择器的使用技巧之如何选择input框
Sep 22 Javascript
button没写type=button会导致点击时提交
Mar 06 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
Nov 20 Javascript
node.js中的fs.rmdir方法使用说明
Dec 16 Javascript
jQuery Easyui datagrid/treegrid 清空数据
Jul 09 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
Mar 22 jQuery
JS判断数组那点事
Oct 10 Javascript
JS实现联想、自动补齐国家或地区名称的功能
Jul 07 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
Session的工作方式
2006/10/09 PHP
WHOIS类的修改版
2006/10/09 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
php读取本地json文件的实例
2018/03/07 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
React优化子组件render的使用
2019/05/12 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
python通过实例讲解反射机制
2019/10/17 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
中学老师的自我评价
2013/11/07 职场文书
高一物理教学反思
2014/01/24 职场文书
运输服务质量承诺书
2014/03/27 职场文书
个性婚礼策划方案
2014/05/17 职场文书
实习公司领导推荐函
2014/05/21 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
教师自查自纠材料
2014/10/14 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
如何利用React实现图片识别App
2022/02/18 Javascript
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL