国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

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

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

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

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

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

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

那么,在瀏覽器還未對字符串連接性能進行優(yōu)化之前,該怎么改進其性能呢?其中一種普遍使用的方法就是使用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ù)組中引入多少字符串都不成問題,因為只有在調(diào)用join()方法時才會發(fā)生連接操作,此時步驟如下:

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

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

 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大牛對決定如何連接字符串的建議,需要考慮兩個因素:(1)被連接的字符串大?。?)數(shù)量

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

 

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

 

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

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

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JavaScript連載6-轉(zhuǎn)化為Number和Boolean類型、運算符
HTML、CSS、JavaScript學(xué)習(xí)總結(jié)
25個最基本的JavaScript面試問題及答案
最全Javascript面試題及答案全在這
jQuery學(xué)習(xí)筆記之JavaScript基礎(chǔ)語法篇
javascript筆記
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服