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下referer兼容各大浏览器的方法
Nov 03 Javascript
JavaScript中switch语句的用法详解
Jun 03 Javascript
浅谈Vue 初始化性能优化
Aug 31 Javascript
javascript 作用于作用域链的详解
Sep 27 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
Apr 20 Javascript
vue移动端路由切换实例分析
May 14 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
Mar 20 Javascript
简单学习5种处理Vue.js异常的方法
Jun 17 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
Aug 27 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
Apr 22 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
May 24 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
Jun 04 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 Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
Google韩国首页图标动画效果
2007/08/26 Javascript
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
Python常见文件操作的函数示例代码
2011/11/15 Python
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
Python中的字符串替换操作示例
2016/06/27 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
Python输出各行命令详解
2018/02/01 Python
python 列表推导式使用详解
2019/08/29 Python
python-numpy-指数分布实例详解
2019/12/07 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
酒店前台辞职书
2015/02/26 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android
Pillow图像处理库安装及使用
2022/04/12 Python