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 相关文章推荐
第一次接触神奇的Bootstrap表单
Jul 27 Javascript
深入理解(function(){... })();
Aug 16 Javascript
Javascript生成带参数的二维码示例
Oct 10 Javascript
微信小程序 九宫格实例代码
Jan 21 Javascript
jQuery实现复选框的全选和反选
Feb 02 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
Jun 22 Javascript
JavaScript实现左侧菜单效果
Dec 14 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
May 07 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
May 31 Javascript
JS中call和apply函数用法实例分析
Jun 20 Javascript
js实现坦克大战游戏
Feb 24 Javascript
ant design vue 表格table 默认勾选几项的操作
Oct 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
PHP4实际应用经验篇(3)
2006/10/09 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
基于JQuery实现的类似购物商城的购物车
2011/12/06 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
jQuery实现图片左右滚动特效
2020/04/20 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
详解详解Python中writelines()方法的使用
2015/05/25 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
Python解决八皇后问题示例
2018/04/22 Python
利用python开发app实战的方法
2019/07/09 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
python tkinter组件使用详解
2019/09/16 Python
简单的Python人脸识别系统
2020/07/14 Python
Python 远程开关机的方法
2020/11/18 Python
allbeauty美国:英国在线美容店
2019/03/11 全球购物
linux下进程间通信的方式
2013/01/23 面试题
艺术设计专业个人求职信范文
2013/12/11 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
女性健康讲座主持词
2015/07/04 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
详细了解java监听器和过滤器
2021/07/09 Java/Android
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server