数组方法解决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中filter(),not(),split()使用方法
Jul 06 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
Dec 26 Javascript
jquery获取iframe中的dom对象(两种方法)
Jul 02 Javascript
Jquery.Form 异步提交表单的简单实例
Mar 03 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
May 03 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
Aug 11 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
Sep 14 Javascript
Vue中的v-for循环key属性注意事项小结
Aug 12 Javascript
详解jQuery获取特殊属性的值以及设置内容
Nov 14 jQuery
详解用场景去理解函数柯里化(入门篇)
Apr 11 Javascript
浅谈ECMAScript 中的Array类型
Jun 10 Javascript
JavaScript实现京东放大镜效果
Dec 03 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 auth_http类库进行身份效验
2009/03/19 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
javascript 写的一个简单的timer
2009/07/30 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
JS中正则表达式要注意lastIndex属性
2017/08/08 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
Python中使用HTMLParser解析html实例
2015/02/08 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
python实现图像外边界跟踪操作
2020/07/13 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
大学总结自我鉴定
2014/01/18 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
经理助理岗位职责
2015/02/02 职场文书
药店营业员岗位职责
2015/04/14 职场文书
演讲比赛主持词
2015/06/29 职场文书
Java 写一个简单的图书管理系统
2022/04/26 Java/Android