数组方法解决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+html+css实现鼠标移动div实例
Jan 30 Javascript
解析URI与URL之间的区别与联系
Nov 22 Javascript
IE与FireFox的JavaScript兼容问题解决办法
Dec 31 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
Apr 02 Javascript
jquery显示隐藏元素的实现代码
May 19 Javascript
JavaScript 函数节流详解及方法总结
Feb 09 Javascript
详解通过JSON数据使用VUE.JS
May 26 Javascript
javascript实现手动点赞效果
Apr 09 Javascript
jQuery实现验证用户登录
Dec 10 jQuery
微信小程序获取复选框全选反选选中的值(实例代码)
Dec 17 Javascript
JS遍历树层级关系实现原理解析
Aug 31 Javascript
JavaScript实现切换多张图片
Jan 27 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
一些PHP写的小东西
2006/12/06 PHP
PHP实现Socket服务器的代码
2008/04/03 PHP
解析yii数据库的增删查改
2013/06/20 PHP
php解析xml方法实例详解
2015/05/12 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
react native 获取地理位置的方法示例
2018/08/28 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
Python 实现随机数详解及实例代码
2017/04/15 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
京东国际站:JOYBUY
2017/11/23 全球购物
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
预备党员思想汇报
2014/01/08 职场文书
黄金酒广告词
2014/03/21 职场文书
装修施工安全责任书
2014/07/24 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
vue使用echarts实现折线图
2022/03/21 Vue.js
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL