数组方法解决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 屏蔽鼠标右键脚本附破解方法
Dec 03 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
Jun 16 Javascript
JS平滑无缝滚动效果的实现代码
May 06 Javascript
JavaScript的instanceof运算符学习教程
Jun 08 Javascript
javascript中异常处理案例(推荐)
Oct 03 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
Nov 02 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
Dec 02 Javascript
Angular的模块化(代码分享)
Dec 26 Javascript
angular-ngSanitize模块-$sanitize服务详解
Jun 13 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
Oct 26 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
Mar 02 Javascript
微信小程序 scroll-view的使用案例代码详解
Jun 11 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
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
PHP网络操作函数汇总
2015/05/18 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
php中使用GD库做验证码
2016/03/31 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
AutoSave/自动存储功能实现
2007/03/24 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
JS跨域总结
2012/08/30 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
python字典多条件排序方法实例
2014/06/30 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
django批量导入xml数据
2016/10/16 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
python多线程之事件Event的使用详解
2018/04/27 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
硕士研究生自我鉴定范文
2013/12/27 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
员工考勤管理制度
2015/08/06 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
Python中npy和mat文件的保存与读取
2022/04/24 Python