天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

JS 字符串連接[性能比較]

一、ECMAScript的字符串是不可變的,即它們的值不能改變,因此當(dāng)你寫出下面的代碼的時候發(fā)生了什么呢?
Js代碼
復(fù)制代碼 代碼如下:
var str = "Hello ";
str += "world";

執(zhí)行的步驟如下:
創(chuàng)建存儲“Hello“的字符串
創(chuàng)建存儲”world“的字符串
創(chuàng)建存儲連接結(jié)果的字符串
把str的當(dāng)前內(nèi)容復(fù)制到結(jié)果中
把“world”復(fù)制到結(jié)果中
更新str,使它指向結(jié)果
每次完成字符串的連接都會執(zhí)行步驟2-6,使得這種操作非常消耗資源。想象一下重復(fù)這個過程幾百次,甚至幾千次,那性能如何?
二、那么再看看下面的代碼,來解決這種窘?jīng)r
Js代碼
復(fù)制代碼 代碼如下:
var arr = new Array;
arr[0] = "Hello ";
arr[1] = "world";
var str = arr.join("");

執(zhí)行的步驟如下:
創(chuàng)建存儲結(jié)果的字符串
把每個字符串復(fù)制到結(jié)果中的適當(dāng)位置
這樣,無論數(shù)組要引入多少字符串都不成問題,因為只有在調(diào)用join()方法時候才會發(fā)生連接操作。
三、覺得操作很復(fù)雜?代碼不能確切反應(yīng)它的意圖?那么我們用對象的解決方式吧,使它更容易理解,用StringBuffer類來封裝該功能:
Js代碼
復(fù)制代碼 代碼如下:
function StringBuffer() {
this._strs = new Array;
}
StringBuffer.prototype.append = function (str) {
this._strs.push(str);
};
StringBuffer.prototype.toString = function() {
this._strs.join("");
};

好了,感受一下吧,現(xiàn)在如何操作字符串呢?
Js代碼
復(fù)制代碼 代碼如下:
var sb = new StringBuffer();
sb.append("Hello ");
sb.append("world");
var result = sb.toString();

四、似乎色香味俱全了,但是吃下去的功效如何?
Js代碼
復(fù)制代碼 代碼如下:
var tStart = new Date();
var str = "";
for(var i=0;i<10000;i++)
{
str += "text"
}
var tEnd = new Date();
document.write("原始的方法加號 拼接10000個字符串 花費(fèi)時間:"+(tEnd.getTime()-tStart.getTime())+"秒");
var oSB = new StringBuffer();
tStart = new Date();
for(var i=0;i<10000;i++)
{
oSB.append("text");
}
var sRst = oSB.toString();
tEnd = new Date();
document.write("<br/>StringBuffer 拼接10000個字符串 花費(fèi)時間:"+(tEnd.getTime()-tStart.getTime())+"秒");

可能你已經(jīng)猜到了,StringBuffer要比+快,到底快多少呢?我的測試結(jié)果:
Js代碼
FF3.0.10
原始的方法加號 拼接10000個字符串 花費(fèi)時間:3豪秒
StringBuffer 拼接10000個字符串 花費(fèi)時間:8豪秒
IE7
原始的方法加號 拼接10000個字符串 花費(fèi)時間:15豪秒
StringBuffer 拼接10000個字符串 花費(fèi)時間:16豪秒
IE8
原始的方法加號 拼接10000個字符串 花費(fèi)時間:15豪秒
StringBuffer 拼接10000個字符串 花費(fèi)時間:16豪秒
Chrome1.0.154.46
原始的方法加號 拼接10000個字符串 花費(fèi)時間:1豪秒
StringBuffer 拼接10000個字符串 花費(fèi)時間:2豪秒
五、怎么回事?
恩?眼睛花了?還是測試結(jié)果貼錯了?還是……?
一切都沒有錯!
2006年11月此書出版《JavaScript高級程序設(shè)計》在84-85頁,就是我上面的內(nèi)容,我的測試結(jié)果卻和它的完全相反,技術(shù)的變革還是……?
我覺得是一個教訓(xùn)!深刻的教訓(xùn)!不知道哪看了這篇文章的人會有何感想。

JavaScript技術(shù)JS 字符串連接[性能比較],轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 一二三四在线播放免费观看中文版视频 | 人妖欧美一区二区三区四区 | 白丝女仆被强扒内裤 | 精品亚洲一区二区在线播放 | 蜜桃传媒视频 | 久久精品国产亚洲AV未满十八 | 国产精品丰满人妻AV麻豆 | 欧美白妞大战非洲大炮 | 人体内射精一区二区三区 | 精品伊人久久久 | 亚洲一区电影在线观看 | 在线国产视频观看 | 先锋影音av无码第1页 | 国产精品亚洲精品日韩电影 | 久久亚洲欧美国产综合 | 国产亚洲精品久久久久久白晶晶 | 8x8x我要打机飞在线观看 | 最新高清无码专区在线视频 | 欧美精品成人一区二区在线观看 | 曰本老头同性xxxxx | 国产免费内射又粗又爽密桃视频 | 寂寞骚妇女被后入式抽插 | 巨黄的肉辣文np | 国产精品久久久久婷婷五月色 | 国产精品嫩草免费视频 | 亚洲AV无码乱码A片无码蜜桃 | 亚洲字幕久久 | 甜宠溺H宝贝嗯撞PLAY啊 | 亚洲人成色777777老人头 | 日韩一区二区三区视频在线观看 | 在线观看成人免费 | 国产精品日本一区二区在线播放 | 99久久亚洲综合精品 | 女子扒开腿让男生桶爽 | 在线亚洲视频无码天堂 | 欧式午夜理伦三级在线观看 | 黄色a三级三级三级免费看 黄色a三级免费看 | 么公一夜要了我一八次视频HD | 午夜AV内射一区二区三区红桃视 | 依人在线观看 | 暖暖高清视频免费 |