zoukankan      html  css  js  c++  java
  • JS下高效拼装字符串的几种方法比较与测试代码

    在使用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; 
  • 相关阅读:
    vue-autoui自匹配webapi的UI控件
    BeetleX.FastHttpApi之测试插件集成
    BeetleX之XRPC远程委托调用
    BeetleX.AdminUI介绍
    使用NetBenchmark压测TCP,HTTP和Websocket服务
    Beetlex实现完整的HTTP协议
    beetlex网关之聚合和url请求过虑
    XRPC之接口双向调用
    XGBoost类库使用小结
    XGBoost算法原理小结
  • 原文地址:https://www.cnblogs.com/Gbeniot/p/4680597.html
Copyright © 2011-2022 走看看