数组方法解决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 相关文章推荐
JavaScript ECMA-262-3 深入解析.第三章.this
Sep 28 Javascript
js获取下拉列表的值和元素个数示例
May 07 Javascript
jQuery实现简单的日期输入格式化控件
Mar 12 Javascript
jQuery插件datalist实现很好看的input下拉列表
Jul 14 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
AngularJs中route的使用方法和配置
Feb 04 Javascript
最常见和最有用的字符串相关的方法详解
Feb 06 Javascript
js中的触发事件对象event.srcElement与event.target详解
Mar 15 Javascript
无限循环轮播图之运动框架(原生JS实现)
Oct 01 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
Oct 20 jQuery
把vue-router和express项目部署到服务器的方法
Feb 21 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
Nov 23 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中curl_multi的应用
2013/07/17 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
对javascript继承的理解
2016/10/11 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
gulp解决跨域的配置文件问题
2017/06/08 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
react以create-react-app为基础创建项目
2018/03/14 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
Python数据结构之图的应用示例
2018/05/11 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
Python常用类型转换实现代码实例
2020/07/28 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
教师申诉制度
2014/01/29 职场文书
2014两会学习心得:时代的发展
2014/03/17 职场文书
高级工程师英文求职信
2014/03/19 职场文书
社会实践活动总结
2015/02/05 职场文书
公积金贷款承诺书
2015/04/30 职场文书
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript