亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript組合拼接字符串的效率對比測試

2019-11-20 13:57:34
字體:
來源:轉載
供稿:網友

在腳本開發過程中,經常會按照某個規則,組合拼接出一個大字符串進行輸出。比如寫腳本控件時控制整個控件的外觀的HTML標簽輸出,比如AJAX里得到服務器端的回傳值后動態分析創建HTML標簽時,不過這里我就不討論拼接字符串的具體應用了,我只是想在這里討論一下拼接的效率。

字符串的拼接在我們寫代碼的時候都是用“+=”這個運算符,s += String; 這是我們最為熟知的寫法,不知道大家有沒有注意過沒有,在組合的字符串容量有幾十K甚至幾百K的時候,腳本執行起來很慢,CPU使用率狂高,例如:

復制代碼 代碼如下:

    var str = "01234567891123456789212345678931234567894123456789";
        str+= "51234567896123456789712345678981234567899123456789/n";
    var result = "";
    for(var i=0; i<2000; i++) result += str;

就這么一步操作,產生的結果字符串是200K,耗時是1.1秒(這個與電腦配置有關),CPU的峰值100%。(為了更直觀地看到效果,我多做了些循環)??上攵瓦@么一步操作就消耗了我一秒多的時間,再加上其它的代碼的時間消耗,那整個腳本塊的執行時間就難以忍受了。那有沒有優化的方案呢?還有其它的方法嗎?答案當然是有的,否則我寫這篇文章就是廢話。

更快的方式就是使用數組,在循環拼接的時候不是相接拼接到某個字符串里去,而是把字符串放到一個數組里,最后用數組.join("") 得到結果字符串,代碼示例:

復制代碼 代碼如下:

    var str = "01234567891123456789212345678931234567894123456789";
        str+= "51234567896123456789712345678981234567899123456789/n";
    var result = "", a = new Array();
    for(var i=0; i<2000; i++) a[i] = str;
    result = a.join(""); a = null;

大家可以測試測試,組合出一個相同大小的字符串所消耗的時間,我這里測試出來的結果是:<15毫秒,請注意,它的單位是毫秒,也就是說組合出這么一個200K的字符串,兩種模式的時間消耗是差不多兩個數量級。這意味著什么?意味著后者已經工作結束吃完中飯回來,前者還在做著苦力。我寫一個測試頁面,大家可以把下面這些代碼拷貝下來另存為一個HTM文件在網頁里打開自己來測試一下兩者之間的效率差,反正我測試的是前者要半分鐘才能完成的事,后者0.07秒就搞定了(循環10000次)。

復制代碼 代碼如下:

<body>
字符串拼接次數<input id="totle" value="1000" size="5" maxlength="5">
<input type="button" value="字符串拼接法" onclick="method1()">
<input type="button" value="數組賦值join法" onclick="method2()"><br>
<div id="method1"> </div>
<div id="method2"> </div>
<textarea id="show" style="width: 100%; height: 400"></textarea>
<SCRIPT LANGUAGE="JavaScript">
<!--
//這個被拼接的字符串長是100字節 author: meizz
var str = "01234567891123456789212345678931234567894123456789";
    str+= "51234567896123456789712345678981234567899123456789/n";

//方法一
function method1()
{
    var result = "";
    var totle  = parseInt(document.getElementById("totle").value);
    var n = new Date().getTime();

    for(var i=0; i<totle; i++)
    {
        result += str;
    }

    document.getElementById("show").value = result;
    var s = "字符串拼接法:拼接后的大字符串長 "+ result.length +"字節,"+
            "拼接耗時 "+ (new Date().getTime()-n) +"毫秒!";
    document.getElementById("method1").innerHTML = s;
}

//方法二
function method2()
{
    var result = "";
    var totle  = parseInt(document.getElementById("totle").value);
    var n = new Date().getTime();

    var a = new Array();
    for(var i=0; i<totle; i++)
    {
        a[i] = str;
    }
    result = a.join(""); a=null;

    document.getElementById("show").value = result;
    var s = "數組賦值join法:拼接后的大字符串長 "+ result.length +"字節,"+
            "拼接耗時 "+ (new Date().getTime()-n) +"毫秒!";
    document.getElementById("method2").innerHTML = s;
}
//-->
</SCRIPT>

最后我再說幾句,是不是以后字符串拼接就一律使用數組join呢?這個要看你的實際需求了,就普通的幾個或者K級的字節的組合就沒有必要使用數組法了,因為開數組變量也是有消耗的。若有幾K以上的字符串組合,那就是數組的效率高了。

IE 6.0:

字符串拼接法:拼接后的大字符串長 1010000字節,拼接耗時 22089毫秒!
數組賦值join法:拼接后的大字符串長 1010000字節,拼接耗時 218毫秒!

Firefox 1.0:

字符串拼接法:拼接后的大字符串長 1010000字節,拼接耗時 1044毫秒!
數組賦值join法:拼接后的大字符串長 1010000字節,拼接耗時 1044毫秒!

Mozilla 1.7:

字符串拼接法:拼接后的大字符串長 1010000字節,拼接耗時 1045毫秒!
數組賦值join法:拼接后的大字符串長 1010000字節,拼接耗時 1044毫秒!

Netscape 7.0:

字符串拼接法:拼接后的大字符串長 1010000字節,拼接耗時 10273毫秒!
數組賦值join法:拼接后的大字符串長 1010000字節,拼接耗時 1138毫秒!

Opera 7.54:

字符串拼接法:拼接后的大字符串長 1010000字節,拼接耗時 6968毫秒!
數組賦值join法:拼接后的大字符串長 1010000字節,拼接耗時 6922毫秒!

循環10000次的測試結果表明在IE和Netscape里可以大大提高效率,而在Firefox Mozilla Opera 里兩種方法耗時基本相近,這些數據足可以判定數組join法優于傳統字符串拼接。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
98精品国产自产在线观看| 久久久亚洲影院| 一区二区三区国产在线观看| 91极品女神在线| 亚洲www在线观看| 久久久国产精品免费| x99av成人免费| 亚洲一区免费网站| 日韩av一区在线| 一级做a爰片久久毛片美女图片| 91麻豆桃色免费看| 午夜精品一区二区三区视频免费看| 日韩av综合网站| 国产免费一区视频观看免费| 国产日韩欧美在线| 7777精品久久久久久| 国产精自产拍久久久久久| 欧美激情在线观看| 国产区精品视频| 精品无人区乱码1区2区3区在线| 亚洲男人天堂2019| 日韩在线免费高清视频| 91色琪琪电影亚洲精品久久| 久久免费视频在线| 久久精品国亚洲| 久久夜色精品国产亚洲aⅴ| 欧美最猛黑人xxxx黑人猛叫黄| 欧美在线观看一区二区三区| 成人免费视频在线观看超级碰| 久久综合九色九九| 欧美日韩免费网站| 亚洲国模精品一区| 法国裸体一区二区| 日韩av在线免费看| 成人午夜在线视频一区| 国产精品午夜视频| 国产精品欧美一区二区三区奶水| 欧美性猛交xxxx黑人猛交| 啊v视频在线一区二区三区| 精品国产一区二区三区久久久狼| 亚洲在线免费观看| 久久精品国产一区| 日韩美女视频免费在线观看| 91精品国产自产在线老师啪| 欧美精品在线网站| 亚洲一级一级97网| 在线播放精品一区二区三区| 国产精品美女视频网站| 日韩美女av在线| 韩国精品久久久999| 欧美视频裸体精品| 欧美日韩国产黄| 欧美大成色www永久网站婷| 亚洲成人xxx| xxav国产精品美女主播| 久久精品中文字幕免费mv| 欧美丰满少妇xxxx| 青青久久av北条麻妃黑人| 一区二区欧美亚洲| 亚洲美女性生活视频| 精品magnet| 欧美午夜精品在线| 136fldh精品导航福利| 97在线视频精品| 国产国语videosex另类| 91美女片黄在线观看游戏| 在线视频亚洲欧美| 欧美性猛交xxxx乱大交3| 日韩欧美亚洲一二三区| 91精品国产电影| 亚洲国产精品va| 亚洲激情视频网| 日本精品免费一区二区三区| 国产精品久久久久久中文字| 亚洲欧美日韩中文视频| 色偷偷偷亚洲综合网另类| 激情懂色av一区av二区av| 色诱女教师一区二区三区| 国产精国产精品| 亚洲免费视频一区二区| 欧美刺激性大交免费视频| 亚洲人成电影网| 欧美巨大黑人极品精男| 久久精品99无色码中文字幕| 亚洲一区二区久久久久久久| 欧美亚洲另类制服自拍| 久久99久久99精品中文字幕| 91精品久久久久久久久青青| 欧美高清视频一区二区| 久久露脸国产精品| 亚洲成人久久久| 欧美精品久久久久久久| 国产成人鲁鲁免费视频a| 色婷婷av一区二区三区久久| 亚洲激情在线视频| 一区二区三区久久精品| 国产精品9999| 国产精品白丝av嫩草影院| 久久精品亚洲精品| 欧美激情中文字幕乱码免费| 国产成人精品在线| 欧美黑人xxxx| 中文字幕在线日韩| 成人免费看片视频| 九九综合九九综合| 日产精品99久久久久久| 国产精品久久中文| 日韩成人在线视频观看| xxxx欧美18另类的高清| 日韩在线精品视频| 亚洲偷欧美偷国内偷| 日韩精品一区二区视频| 亚洲精品在线观看www| 亚洲精品aⅴ中文字幕乱码| 国产91在线播放九色快色| 亚洲欧美日韩中文在线| 国产精品老女人精品视频| 欧美精品videosex性欧美| 国产成人精品一区二区在线| 操91在线视频| 精品亚洲一区二区三区四区五区| 中文字幕亚洲一区二区三区| 91系列在线观看| 91免费在线视频| 亚洲欧美三级在线| 亚洲国产欧美久久| 欧美日韩国产在线播放| 国产精品草莓在线免费观看| 亚洲一区二区三区视频播放| 97视频在线免费观看| 美日韩丰满少妇在线观看| 欧美三级免费观看| 欧美怡红院视频一区二区三区| 夜色77av精品影院| 亚洲一区二区久久| 亚洲欧美在线一区| 91精品久久久久久久久中文字幕| 国产成人jvid在线播放| 97精品一区二区视频在线观看| 国产成人高潮免费观看精品| 亚洲图片制服诱惑| 亚洲v日韩v综合v精品v| 亚洲综合中文字幕在线| 91视频8mav| 欧美乱大交xxxxx另类电影| 国产日韩欧美另类| 国产精品一区二区三区成人| 欧美激情xxxxx| 91国产精品视频在线| 欧美制服第一页| 91久久精品久久国产性色也91| 亚洲精品国产综合区久久久久久久| 亚洲人成77777在线观看网| 国产亚洲免费的视频看| 亚洲精品网址在线观看| 麻豆一区二区在线观看| 国产精品揄拍500视频| 中文字幕亚洲欧美日韩高清| 国产亚洲精品激情久久| 国产精品入口夜色视频大尺度| 国产a级全部精品| 一区二区三区高清国产| 国产精品视频久久| 日韩欧美一区二区三区|