数组方法解决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函数
Jul 21 Javascript
js GridView 实现自动计算操作代码
Mar 25 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
Jan 06 Javascript
jquery将一个表单序列化为一个对象的方法
Jan 03 Javascript
使用jquery prev()方法找到同级的前一个元素
Jul 11 Javascript
jQuery中的pushStack实现原理和应用实例
Feb 03 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
Apr 26 Javascript
使用RequireJS库加载JavaScript模块的实例教程
Jun 06 Javascript
基于Vue.js 2.0实现百度搜索框效果
Dec 28 Javascript
React styled-components设置组件属性的方法
Aug 07 Javascript
JS实现网页烟花动画效果
Mar 10 Javascript
微信分享invalid signature签名错误踩过的坑
Apr 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
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
JavaScript 学习笔记(十一)
2010/01/19 Javascript
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
2019/08/08 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
python练习程序批量修改文件名
2014/01/16 Python
python抓取网页图片示例(python爬虫)
2014/04/27 Python
python字符串连接方式汇总
2014/08/21 Python
为Python程序添加图形化界面的教程
2015/04/29 Python
python 剪切移动文件的实现代码
2018/08/02 Python
容易被忽略的Python内置类型
2020/09/03 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
软件工程师面试题
2012/06/25 面试题
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
2014年销售部工作总结
2014/12/01 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python