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 源代码显示控件 (Ajax加载方式).
May 18 Javascript
jquery ajax例子返回值详解
Sep 11 Javascript
JavaScript计划任务后台运行的方法
Dec 18 Javascript
jQuery简单注册和禁用全局事件的方法
Jul 25 Javascript
JS中事件冒泡和事件捕获介绍
Dec 13 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
Mar 02 Javascript
vue实现在表格里,取每行的id的方法
Mar 09 Javascript
Vue中使用vux配置代码详解
Sep 16 Javascript
npm scripts 使用指南详解
Oct 08 Javascript
JavaScript基础之静态方法和实例方法分析
Dec 26 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
Jan 12 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 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登录验证码的实现与使用方法
2016/07/07 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
jQuery拖动图片删除示例
2013/05/10 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Python中的并发编程实例
2014/07/07 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
python后端接收前端回传的文件方法
2019/01/02 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
基于Python正确读取资源文件
2020/09/14 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
优秀共产党员先进事迹材料
2014/05/06 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
社区服务活动感想
2015/08/11 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL