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 相关文章推荐
js拦截alert对话框另类应用
Jan 16 Javascript
jQuery的slideToggle方法实例
May 07 Javascript
JQuery 使用attr方法实现下拉列表选中
Oct 13 Javascript
基于AngularJS前端云组件最佳实践
Oct 20 Javascript
jQuery中$.ajax()方法参数解析
Oct 22 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
jQuery源码分析之sizzle选择器详解
Feb 13 Javascript
Vue实现双向数据绑定
May 03 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
May 22 Javascript
vue2.0学习之axios的封装与vuex介绍
May 28 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
Jul 12 Javascript
js判断在哪个浏览器打开项目的方法
Jan 21 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
for循环连续求和、九九乘法表代码
2012/02/20 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
angularjs实现首页轮播图效果
2017/04/14 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
vue中注册自定义的全局js方法
2019/11/15 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
Python中使用logging模块打印log日志详解
2015/04/05 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
Python实现带百分比的进度条
2016/06/28 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
深入浅析Python传值与传址
2018/07/10 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
python socket 聊天室实例代码详解
2019/11/14 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
美国在线印刷公司:PsPrint
2017/10/12 全球购物
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物