JavaScript 字符串連接性能優(yōu)化
更新時間:2008年12月20日 15:23:19 作者:
從多次測試結(jié)果看來,使用StringBuffer 可以節(jié)省50%以上的時間
復(fù)制代碼 代碼如下:
var str = "hello";
str += " world";
后臺所做工作:
1)創(chuàng)建存儲 "hello" 的字符串,且使 str 指向它。
2)創(chuàng)建存儲 "world" 的字符串。
3)創(chuàng)建存儲結(jié)果的字符串。
4)將 str 中的當(dāng)前內(nèi)容復(fù)制到結(jié)果字符串中。
5)把 world 復(fù)制到結(jié)果字符串中。
6)更新 str ,使 str 指向結(jié)果字符串。
每拼接一次字符串就循環(huán)重復(fù)2)~6),如果重復(fù)成百上千次則會非常消耗資源,影響性能。
解決方法:
使用 Array 對象存儲字符串,之后使用 join()方法輸出結(jié)果。
仿照 Java 中的 StringBuffer 類。
復(fù)制代碼 代碼如下:
function StringBuffer(){
this._strings = new Array;
}
StringBuffer.prototype.append = function (str){
this._strings.push(str);
}
StringBuffer.prototype.toString = function (){
return this._strings.join("");
}
測試性能:
代碼1:使用 "+=" 拼接字符串
復(fù)制代碼 代碼如下:
var d = new Date();
var str = "";
for(var i=0;i<10000;i++){
str += "test";
}
var d2 = new Date();
document.writeln(d2.getTime()-d.getTime());
代碼2:使用 StringBuffer
復(fù)制代碼 代碼如下:
var d = new Date();
var str = new StringBuffer();
for(var i=0;i<10000;i++){
str.append("test");
}
var res = str.toString();
var d2 = new Date();
document.writeln(d2.getTime()-d.getTime());
從多次測試結(jié)果看來,使用StringBuffer 可以節(jié)省50%以上的時間。
相關(guān)文章
奉獻給JavaScript初學(xué)者的編寫開發(fā)的七個細節(jié)
每種語言都有它特別的地方,對于JavaScript來說,使用var就可以聲明任意類型的變量,這門腳本語言看起來很簡單,然而想要寫出優(yōu)雅的代碼卻是需要不斷積累經(jīng)驗的。本文利列舉了JavaScript初學(xué)者應(yīng)該注意的七個細節(jié),與大家分享。2011-01-01
Echarts實現(xiàn)暫無數(shù)據(jù)的三種方法
本文將介紹如何使用Echarts實現(xiàn)暫無數(shù)據(jù)的三種方法,詳細講解這三種方法的實現(xiàn)步驟和效果展示,幫助讀者更好地理解如何在Echarts中處理暫無數(shù)據(jù)的情況2023-08-08

