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 相关文章推荐
Mootools 1.2教程 类(一)
Sep 15 Javascript
简介JavaScript中的sub()方法的使用
Jun 08 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
Jun 18 Javascript
JavaScript程序中实现继承特性的方式总结
Jun 24 Javascript
Javascript数组循环遍历之forEach详解
Nov 07 Javascript
用move.js库实现百叶窗特效
Feb 08 Javascript
浅谈vue路径优化之resolve
Oct 13 Javascript
javascript+jQuery实现360开机时间显示效果
Nov 03 jQuery
JS代码实现电脑配置检测功能
Mar 21 Javascript
详解使用mocha对webpack打包的项目进行&quot;冒烟测试&quot;的大致流程
Apr 27 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
Oct 18 Javascript
微信小程序调用后台service教程详解
Nov 06 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 explode()函数用法、切分字符串
2012/10/03 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
PHP获取数组最大值下标的方法
2015/05/12 PHP
php封装的page分页类完整实例
2016/10/18 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
js微信支付实现代码
2016/12/22 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
nodejs服务搭建教程 nodejs访问本地站点文件
2017/04/07 NodeJs
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
Python3基础之条件与循环控制实例解析
2014/08/13 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
python+logging+yaml实现日志分割
2019/07/22 Python
python用700行代码实现http客户端
2021/01/14 Python
CSS3中的@keyframes关键帧动画的选择器绑定
2016/06/13 HTML / CSS
NFL墨西哥官方商店:Tienda NFL
2017/11/28 全球购物
VICHY薇姿俄罗斯官方网上商店:法国护肤品牌,火山温泉水
2019/11/22 全球购物
自荐书范文
2013/12/08 职场文书
公司总经理工作职责管理办法
2014/02/28 职场文书
聘任合同书
2015/09/21 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL