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 相关文章推荐
二级域名或跨域共享Cookies的实现方法
Aug 07 Javascript
js客户端快捷键管理类的较完整实现和应用
Jun 08 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
Mar 01 Javascript
浅谈Javascript 执行顺序
Dec 18 Javascript
jQuery Validate表单验证深入学习
Dec 18 Javascript
下一代Bootstrap的5个特点 超酷炫!
Jun 17 Javascript
Webpack打包慢问题的完美解决方法
Mar 16 Javascript
node.js到底要不要加分号浅析
Jul 11 Javascript
vue-cli3全面配置详解
Nov 14 Javascript
js函数柯里化的方法和作用实例分析
Apr 11 Javascript
OpenLayers3实现地图显示功能
Sep 25 Javascript
前端学习——JavaScript原生实现购物车案例
Mar 31 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中的正规表达式(二)
2006/10/09 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Python输入二维数组方法
2018/04/13 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
公积金接收函格式
2015/01/30 职场文书
2015年人事专员工作总结
2015/04/29 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
给校长的建议书范文
2015/09/14 职场文书
禁毒心得体会范文
2016/01/15 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python