数组方法解决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 操作Javascript对象和数组的工具函数小结
Jan 22 Javascript
js中有关IE版本检测
Jan 04 Javascript
jQuery 滑动方法slideDown向下滑动元素
Jan 16 Javascript
jQuery动画效果animate和scrollTop结合使用实例
Apr 02 Javascript
JavaScript中的Math.LN2属性用法详解
Jun 12 Javascript
javascript实现随机生成DIV背景色
Jun 20 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
Nov 23 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
Jan 18 Javascript
微信小程序组件传值图示过程详解
Jul 31 Javascript
node-red File读取好保存实例讲解
Sep 11 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
Feb 26 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
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
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
JQuery live函数
2010/12/24 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
Vue指令指令大全
2019/02/09 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
实例解析Python中的__new__特殊方法
2016/06/02 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
利用python爬取斗鱼app中照片方法实例
2017/12/03 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
深入了解Python 变量作用域
2020/07/24 Python
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
党课学习思想汇报
2014/01/02 职场文书
房屋转让协议书
2014/04/11 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
委托培训协议书
2014/11/17 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
我的生日感言
2015/08/03 职场文书