数组方法解决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 动态扩展对象之另类视角
May 25 Javascript
基于jquery的无限级联下拉框js插件
Oct 29 Javascript
基于JQuery的多标签实现代码
Sep 19 Javascript
jquery Moblie入门—hello world的示例代码学习
Jan 08 Javascript
Javascript合并表格中具有相同内容单元格示例
Aug 11 Javascript
js正则表达exec与match的区别说明
Jan 29 Javascript
jQuery实现高亮显示的方法
Mar 10 Javascript
jquery实现的代替传统checkbox样式插件
Jun 19 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
Jul 14 Javascript
js实现的xml对象转json功能示例
Dec 24 Javascript
vue实现分页组件
Jun 16 Javascript
js实现星星打分效果
Jul 05 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下MAIL的另一解决方案
2006/10/09 PHP
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
php以post形式发送xml的方法
2014/11/04 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
js function定义函数使用心得
2010/04/15 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
javascript消除window.close()的提示窗口
2015/05/20 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
vue 监听屏幕高度的实例
2018/09/05 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
Python下singleton模式的实现方法
2014/07/16 Python
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
Python访问MySQL封装的常用类实例
2014/11/11 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
python处理数据,存进hive表的方法
2018/07/04 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
python+django+rest框架配置创建方法
2019/08/31 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
关于Java String的一道面试题
2013/09/29 面试题
行政管理毕业生自荐信
2014/02/24 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
应聘教师自荐书
2014/06/16 职场文书
世界文化遗产导游词
2015/02/13 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
python 爬取华为应用市场评论
2021/05/29 Python