JS下高效拼装字符串的几种方法比较与测试代码


Posted in Javascript onApril 15, 2010

在使用Ajax提交信息时,我可能常常需要拼装一些比较大的字符串通过XmlHttp来完成POST提交。尽管提交这样大的信息的做法看起来并不优雅,但有时我们可能不得不面对这样的需求。那么JavaScript中对字符串的累加速度如何呢?我们先来做下面的这个实验。累加一个长度为30000的字符串。
测试代码1 - 耗时: 14.325秒

var str = ""; 
for (var i = 0; i < 50000; i++) { 
str += "xxxxxx"; 
}

这段代码耗时14.325秒,结果并不理想。现在我们将代码改为如下的形式:
测试代码2 - 耗时: 0.359秒
var str = ""; 
for (var i = 0; i < 100; i++) { 
var sub = ""; 
for (var j = 0; j < 500; j++) { 
sub += "xxxxxx"; 
} 
str += sub; 
}

这段代码耗时0.359秒!同样的结果,我们做的只是首先拼装一些较小的字符串然后再组装成更大的字符串。这种做法可以有效的在字符串拼装的后期减小内存复制的数据量。知道了这一原理之后我们还可以把上面的代码进一步拆散以后进行测试。下面的代码仅耗时0.140秒。
测试代码3 - 耗时: 0.140秒
var strArray = new Array(); 
for (var i = 0; i < 100; i++) { 
var sub = ""; 
for (var j = 0; j < 500; j++) { 
sub += "xxxxxx"; 
} 
strArray.push(sub); 
} 
str = String.prototype.concat.apply("", strArray);

不过,上面这种做法也许并不是最好的!如果我们需要提交的信息是XML格式的(其实绝大多数情况下,我们都可以设法将要提交的信息组装成XML格式),我们还能找能更高效更优雅的方法—利用DOM对象为我们组装字符串。下面这段代买组装一个长度为950015的字符串仅须耗时0.890秒。
利用DOM对象组装信息 - 耗时: 0.890秒
var xmlDoc; 
if (browserType == BROWSER_IE) { 
xmlDoc = new ActiveXObject("Msxml.DOMDocument"); 
} 
else { 
xmlDoc = document.createElement("DOM"); 
} 
var root = xmlDoc.createElement("root"); 
for (var i = 0; i < 50000; i++) { 
var node = xmlDoc.createElement("data"); 
if (browserType == BROWSER_IE) { 
node.text = "xxxxxx"; 
} 
else { 
node.innerText = "xxxxxx"; 
} 
root.appendChild(node); 
} 
xmlDoc.appendChild(root); 
var str; 
if (browserType == BROWSER_IE) { 
str = xmlDoc.xml; 
} 
else { 
str = xmlDoc.innerHTML; 
}
Javascript 相关文章推荐
基于jquery的实现简单的表格中增加或删除下一行
Aug 01 Javascript
Jquery节点遍历next与nextAll方法使用示例
Jul 22 Javascript
js实现支持手机滑动切换的轮播图片效果实例
Apr 29 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
May 12 Javascript
js实现右键菜单功能
Nov 28 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
Node.js中文件操作模块File System的详细介绍
Jan 05 Javascript
微信小程序实现顶部选项卡(swiper)
Jun 19 Javascript
微信小程序http连接访问解决方案的示例
Nov 05 Javascript
微信小程序事件 bindtap bindinput代码实例
Aug 26 Javascript
react PropTypes校验传递的值操作示例
Apr 28 Javascript
javascript实现雪花飘落效果
Aug 19 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
Apr 14 #Javascript
JavaScript 保存数组到Cookie的代码
Apr 14 #Javascript
轻轻松松学JS调试(不下载任何工具)
Apr 14 #Javascript
jQuery EasyUI 中文API Button使用实例
Apr 14 #Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
Apr 14 #Javascript
JavaScript中的prototype使用说明
Apr 13 #Javascript
Js 刷新框架页的代码
Apr 13 #Javascript
You might like
php下通过POST还是GET来传值
2008/06/05 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
2016/10/29 PHP
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
2013/11/26 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
python使用marshal模块序列化实例
2014/09/25 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
Python语言进阶知识点总结
2019/05/28 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
django中嵌套的try-except实例
2020/05/21 Python
Python 读取位于包中的数据文件
2020/08/07 Python
幸福家庭事迹材料
2014/02/03 职场文书
师德师风承诺书
2014/05/23 职场文书
拉拉队口号
2014/06/16 职场文书
学生安全责任书模板
2014/07/25 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
写给女朋友的保证书
2015/05/09 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
跑出一片天观后感
2015/06/08 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
Python实现数据的序列化操作详解
2022/07/07 Python