探讨js字符串数组拼接的性能问题


Posted in Javascript onOctober 11, 2014

我们知道,在js中,字符串连接是性能最低的操作之一。
例如:

var text="Hello";  

text+=" World!"; 

早期浏览器没有对这种运算进行优化。
由于字符串是不可变的,这意味着要创建中间字符串来存储连接的结果。频繁地在后台创建和销毁字符串导制性能异常低下。

因此,可以利用数组对象进行优化。
例如:

var buffer=[],i=0; 
buffer[i++]="Hello";  //通过相应索引值添加元素比push方法快 
buffer[i++]=" World!"; 
var text=buffer.join("");

在早期的浏览器中,没有创建和销毁中间字符串,在大量字符串连接情况下,这技术已被证明远快于使用加法方式。
 
如今浏览器对字符串的优化已经改变了字符串相连的局面。Safari、Opera、Chrome、Firefox和IE8都在使用加法运算符上表现出了更好的性能。但是,IE8之前的版本没有优化,因此数组方法依然有效。这并不意味着字符串相连时我们要进行浏览器检测。在决定如何连接时要考虑的是字符串的大小和数量。

当字符串相对较小(小于20字符)且连接数量也较小时(小于1000个),所有的浏览器使用加法运算符都能在不到1毫秒内轻松完成连接。增加字符串数量或大小时,IE7中性能会明显下降。字符串大小增加时,Firefox中加法运算符和数组成技巧性能差异会变小。字符串数量增加时,Safari中加法运算符和数组成技巧性能差异会变小。改变字符串数量或大小时,Chrome和Opera中加法运算符一直保持领先优势。

所以,由于在各浏览器下性能不一致,选用技术取决于实际情况和面对的浏览器。

大多数情况下,加法运算符是首选;如果用户主要使用IE6或7,并且字符串大小较大或数量较多时,那么数组技术就很值得。
 
一般情况下,如果是语义性的字符串,不应该使用Array,比如:
'Hello, my name is ' + name; 
 
如果字符串是"相似情况的重复"的话,建议使用Array,比如:

var array = []; 
for (i = 0; i < length; i++) { 
array[i] = '<li>' + list[i] + '</li'>; 
} 
document.getElementById('somewhere').innerHTML = array.join('\n');

有关js字符串数组连接的性能比较,就介绍到这里了,希望对大家有所帮助。

Javascript 相关文章推荐
飞鱼(shqlsl) javascript作品集
Dec 16 Javascript
学习YUI.Ext 第四天--对话框Dialog的使用
Mar 10 Javascript
Javascript this 的一些学习总结
Aug 31 Javascript
ajax上传时参数提交不更新等相关问题
Dec 11 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
Oct 14 Javascript
jquery利用拖拽方式在图片上添加热链接
Nov 24 Javascript
Vue2.0 事件的广播与接收(观察者模式)
Mar 14 Javascript
微信小程序和百度的语音识别接口详解
May 06 Javascript
layui实现二维码弹窗、并下载到本地的方法
Sep 25 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
Jul 22 Javascript
jQuery实现回到顶部效果
Oct 19 jQuery
分享20款美化网站的 jQuery Lightbox 灯箱插件
Oct 10 #Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
Oct 10 #Javascript
js点击button按钮跳转到另一个新页面
Oct 10 #Javascript
jQuery获取iframe的document对象的方法
Oct 10 #Javascript
jquery实现多行文字图片滚动效果示例代码
Oct 10 #Javascript
一个js过滤空格的小函数
Oct 10 #Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
Oct 10 #Javascript
You might like
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
jquery+json实现的搜索加分页效果
2010/03/31 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
python的中异常处理机制
2018/08/30 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
pytorch forward两个参数实例
2020/01/17 Python
python线程join方法原理解析
2020/02/11 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
python爬取代理ip的示例
2020/12/18 Python
JSF的标签库有哪些
2012/04/27 面试题
大学生工作自荐书
2014/06/16 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
交心谈心活动总结
2015/05/11 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
导游词之无锡东林书院
2019/12/11 职场文书