数组方法解决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 相关文章推荐
jQuery隔行变色与普通JS写法的对比
Apr 21 Javascript
基于JavaScript 下namespace 功能的简单分析
Jul 05 Javascript
模拟多级复选框效果的jquery代码
Aug 13 Javascript
浅谈jQuery.easyui的datebox格式化时间
Jun 25 Javascript
jQuery.Callbacks()回调函数队列用法详解
Jun 14 Javascript
js+html5实现半透明遮罩层弹框效果
Aug 24 Javascript
javascript 产生随机数的几种方法总结
Sep 26 Javascript
webpack4的迁移的使用方法
May 25 Javascript
微信公众号H5支付接口调用方法
Jan 10 Javascript
element-ui中Table表格省市区合并单元格的方法实现
Aug 07 Javascript
微信小程序动态设置图片大小的方法
Nov 21 Javascript
通过js实现压缩图片上传功能
Feb 25 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实现的返回数据格式化类实例
2014/09/22 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
php判断当前操作系统类型
2015/10/28 PHP
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
Python转码问题的解决方法
2008/10/07 Python
python妹子图简单爬虫实例
2015/07/07 Python
Python六大开源框架对比
2015/10/19 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
如何获取Python简单for循环索引
2019/11/21 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
Pytorch mask-rcnn 实现细节分享
2020/06/24 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
进修护士自我鉴定
2013/10/14 职场文书
公司中层干部的自我评价分享
2014/03/01 职场文书
本科应届生自荐信
2014/06/29 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
消费者理赔投诉书
2015/07/02 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python
移除Selenium中window.navigator.webdriver值
2022/06/10 Python