久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

關(guān)于javascript字符串連接性能

 handanyou 2010-11-08

最近在看《高性能網(wǎng)站建設(shè)進(jìn)階指南》,第七章為《編寫高效的javascript》,,作者為Nicholas C. Zakas(同時(shí)也是《javascript高級程序設(shè)計(jì)》的作者),,里面講到字符串連接的優(yōu)化問題。

字符串連接一直是javascript中性能最低的操作之一,,通常情況下,,字符串連接是通過使用加法運(yùn)算符(+)來實(shí)現(xiàn)的,比方說

var text="hello";
text+=" ";
text+="world!";

早期瀏覽器沒有對這種運(yùn)算進(jìn)行優(yōu)化,。由于字符串是不可變的,,這意味著要?jiǎng)?chuàng)建中間字符串來存儲連接的結(jié)果。參照《javascript高級程序設(shè)計(jì)》,,大致要經(jīng)過以下幾個(gè)步驟:

  1. 創(chuàng)建存儲"hello"的字符串,。
  2. 創(chuàng)建存儲"world"的字符串。
  3. 創(chuàng)建存儲連接結(jié)果的字符串,。
  4. 把str的當(dāng)前內(nèi)容復(fù)制到結(jié)果中,。
  5. 把"world "復(fù)制到結(jié)果中。
  6. 更新str,,使它指向結(jié)果,。

頻繁地在后臺創(chuàng)建和銷毀字符串會導(dǎo)致字符串連接的性能異常低下,。

好在如今大部分瀏覽器已經(jīng)對字符串連接進(jìn)行了優(yōu)化。第一款進(jìn)行優(yōu)化的瀏覽器是Firefox,,從1.0版本開始,,在所有情況下使用數(shù)組技術(shù)實(shí)際上都比使用加法運(yùn)算慢。其他瀏覽器也優(yōu)化了字符串連接,,Safari、Opera,、Chrome和Internet Explorer8也都在使用加法運(yùn)算符上表現(xiàn)出了更好的性能,。(PS:在Ie8之前的版本沒有進(jìn)行優(yōu)化)

那么,在瀏覽器還未對字符串連接性能進(jìn)行優(yōu)化之前,,該怎么改進(jìn)其性能呢,?其中一種普遍使用的方法就是使用Array對象,方法如下:

function StringBuffer(){

    this._strings=new Array();

}

StringBuffer.prototype.append=function(str){

    this._strings.push(str)

}

StringBuffer.prototype.toString=function(){

    return this._strings.join("");

}

這樣,,無論在數(shù)組中引入多少字符串都不成問題,,因?yàn)橹挥性谡{(diào)用join()方法時(shí)才會發(fā)生連接操作,此時(shí)步驟如下:

  1. 創(chuàng)建存儲結(jié)果的數(shù)組
  2. 把每個(gè)字符串復(fù)制到結(jié)果中的合適位置
  3. 將數(shù)組合并成字符串返回

經(jīng)過測試,,采用上述方法,,在Firefox 3.6中以及Ie 8中,性能其實(shí)比直接用加法運(yùn)算符(+)效率要低(上文說過現(xiàn)在大部分主流瀏覽器都已經(jīng)經(jīng)過優(yōu)化),,然而,,在IE 8之前版本的IE瀏覽器中,采用這種方法連接字符串,,性能比直接用加法運(yùn)算符(+)有很大的提高,,大概是60%左右(也就是花費(fèi)的時(shí)間為原來的1/3左右),用的是《javascript高級程序設(shè)計(jì)》里的測試代碼:

 var d1=new Date();
 var str="";
 for(var i=0;i<10000;i++){
     str+="text";
 }
 var d2=new Date();
 var d3=d2.getTime()-d1.getTime();

 
 var buffer=new StringBuffer();
 d1=new Date();
 for(var j=0;j<10000;j++){
     buffer.append("text");
 }
 var result=buffer.toString();
 d2=new Date();
 var d4=d2.getTime()-d1.getTime();

 alert("d3:"+d3+" d4:"+d4);

 

以下是Nicholas C. Zakas大牛對決定如何連接字符串的建議,,需要考慮兩個(gè)因素:(1)被連接的字符串大?。?)數(shù)量

  • 當(dāng)字符串較小(少于20個(gè)字符)且連接的數(shù)量也較小時(shí)(少于1000個(gè)),,所有的瀏覽器中使用的加法運(yùn)算符都能在不到1毫秒之內(nèi)輕松完成連接,。在這種情況下就沒有理由去考慮加法運(yùn)算符以外的方式了。

 

  • 增加連接字符串的數(shù)量或大小時(shí),,在IE 7中性能會明顯下降,。當(dāng)字符串大小增加時(shí),在Firefox中加法運(yùn)算符和數(shù)組技術(shù)的性能差異會變小,。當(dāng)字符串連接數(shù)量增加時(shí),,在Safari中這兩種技術(shù)的新能差異也同樣會變小。只有Chrome和Opera在改變連接字符串的大小和數(shù)量時(shí),,加法運(yùn)算符一直保持著顯著的性能優(yōu)勢,。

 

  • 由于在各瀏覽器下性能不一致,,所以選用哪種技術(shù)在很大程度上取決與實(shí)際情況和面對的瀏覽器。如果用戶主要使用IE 6或7,,那么使用數(shù)組技術(shù)就很值得,,因?yàn)檫@會影響大多數(shù)人。(備注:目前國內(nèi)使用IE 6的人不少,。,。。)通常使用數(shù)組技術(shù)在其他瀏覽器中的性能損失要遠(yuǎn)小于在IE中的性能提升,,所以要基于用戶的瀏覽器來權(quán)衡用戶體驗(yàn),,而不要視圖去針對某種具體情況或?yàn)g覽器版本。不過,,在大多數(shù)情況下,,加法運(yùn)算符也是首選的。

原文:http://www.cnblogs.com/chyingp/archive/2010/10/07/1844887.html

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多