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 相关文章推荐
javascript loadScript异步加载脚本示例讲解
Nov 14 Javascript
jQuery中delegate和on的用法与区别详细解析
Jan 26 Javascript
限制上传文件大小和格式的jQuery插件实例
Jan 24 Javascript
js实现仿QQ秀换装效果的方法
Mar 04 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
Mar 04 Javascript
javascript:void(0)点击登录没反应怎么解决
Nov 13 Javascript
喜大普奔!jQuery发布 3.0 最终版
Jun 12 Javascript
深入理解JavaScript中Ajax
Aug 02 Javascript
常用的js方法合集
Mar 10 Javascript
Javascript中八种遍历方法的执行速度深度对比
Apr 25 Javascript
详解node child_process模块学习笔记
Jan 24 Javascript
js实现扫雷源代码
Nov 27 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 分页原理详解
2009/08/21 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
js验证模型自我实现的具体方法
2013/06/21 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
2018/05/04 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
Python中针对函数处理的特殊方法
2014/03/06 Python
Python用模块pytz来转换时区
2016/08/19 Python
深入学习python多线程与GIL
2019/08/26 Python
基于python实现把图片转换成素描
2019/11/13 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
Python生成并下载文件后端代码实例
2020/08/31 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
英国著名书店:Foyles
2018/12/01 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
linux面试题参考答案(10)
2013/11/04 面试题
Python里面如何拷贝一个对象
2014/02/17 面试题
工作态度检讨书
2014/02/11 职场文书
食品安全工作实施方案
2014/03/26 职场文书
学习雷锋倡议书
2014/04/15 职场文书
大学班级学风建设方案
2014/05/01 职场文书
2015年学校安全工作总结
2015/04/22 职场文书
战友聚会致辞
2015/07/28 职场文书
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers