JavaScript中String和StringBuffer的速度之爭
更新時間:2010年04月01日 16:52:57 作者:
很多Javascript書籍中都是類比于Java說String在頻繁的和大量的字符串連接方面的效率是不如StringBuffer的。
顯示情況時Javascript中并沒有StringBuffer類,一種主流的Javascript StringBuffer類的實(shí)現(xiàn)是通過prototype構(gòu)造一個StringBuffer類。
StringBuffer.js
function StringBuffer(){
this.content = new Array;
}
StringBuffer.prototype.append = function( str ){
this.content.push( str );
}
StringBuffer.prototype.toString = function(){
return this.content.join("");
}
現(xiàn)在讓我們寫一個測試用例:
TestStringBUffer.html
<html>
<head>
<title>test</title>
<script type="text/javascript“ language="javascript" src="StringBuffer.js"></script>
<script>
function testStringBuffer(){
var date1 = new Date();
var str;
for( var i=0; i<10000; i++){
str += "text";
}
var date2 = new Date();
document.writeln("Sting use time:"+ (date2 - date1) +"ms");
var date3 = new Date();
var strBuffer = new StringBuffer();
for(i=0; i<10000; i++){
strBuffer.append("text");
}
strBuffer.toString();
var date4 = new Date();
document.writeln("<br/>StringBuffer use time:"+ (date4 - date3) +"ms");
}
</script>
</head>
<body>
<input type="button" value="testStringBuffer" onclick="testStringBuffer()"/>
</body>
</html>
現(xiàn)在讓我們來測試下,看看會有什么發(fā)生:
IE8:
Sting use time:11ms
StringBuffer use time:47ms
結(jié)果是StringBuffer不但沒有比String效率高,反而使低了不少。難道是前輩們錯了?
那讓我們再在別的瀏覽器中看看吧:
IE7:
Sting use time:266ms
StringBuffer use time:78ms
IE7中StringBuffer的優(yōu)勢很明顯。
可以看到,在現(xiàn)在的主流瀏覽器中,都對String類的字符串連接作了優(yōu)化,所以性能要好于自定義的StringBuffer類,但是在比較老的瀏覽器中,StringBuffer類的優(yōu)勢仍然很明顯。具體在實(shí)際中就需要對瀏覽器進(jìn)行判斷。
StringBuffer.js
復(fù)制代碼 代碼如下:
function StringBuffer(){
this.content = new Array;
}
StringBuffer.prototype.append = function( str ){
this.content.push( str );
}
StringBuffer.prototype.toString = function(){
return this.content.join("");
}
現(xiàn)在讓我們寫一個測試用例:
TestStringBUffer.html
復(fù)制代碼 代碼如下:
<html>
<head>
<title>test</title>
<script type="text/javascript“ language="javascript" src="StringBuffer.js"></script>
<script>
function testStringBuffer(){
var date1 = new Date();
var str;
for( var i=0; i<10000; i++){
str += "text";
}
var date2 = new Date();
document.writeln("Sting use time:"+ (date2 - date1) +"ms");
var date3 = new Date();
var strBuffer = new StringBuffer();
for(i=0; i<10000; i++){
strBuffer.append("text");
}
strBuffer.toString();
var date4 = new Date();
document.writeln("<br/>StringBuffer use time:"+ (date4 - date3) +"ms");
}
</script>
</head>
<body>
<input type="button" value="testStringBuffer" onclick="testStringBuffer()"/>
</body>
</html>
現(xiàn)在讓我們來測試下,看看會有什么發(fā)生:
IE8:
Sting use time:11ms
StringBuffer use time:47ms
結(jié)果是StringBuffer不但沒有比String效率高,反而使低了不少。難道是前輩們錯了?
那讓我們再在別的瀏覽器中看看吧:
IE7:
Sting use time:266ms
StringBuffer use time:78ms
IE7中StringBuffer的優(yōu)勢很明顯。
可以看到,在現(xiàn)在的主流瀏覽器中,都對String類的字符串連接作了優(yōu)化,所以性能要好于自定義的StringBuffer類,但是在比較老的瀏覽器中,StringBuffer類的優(yōu)勢仍然很明顯。具體在實(shí)際中就需要對瀏覽器進(jìn)行判斷。
相關(guān)文章
javascript 導(dǎo)出數(shù)據(jù)到Excel(處理table中的元素)
最近做的項(xiàng)目中有個要求,需要將數(shù)據(jù)導(dǎo)出到Excel中,關(guān)于這個就不是什么問題,網(wǎng)上的資料很多。可當(dāng)Table中有Input(text)之類的元素是怎么辦?2009-12-12JS監(jiān)聽dom高度變化幾種常用方法總結(jié)
我們在開發(fā)中會遇到一些需求,需要監(jiān)聽元素變化,比如元素屬性變化,元素大小變化,這篇文章主要給大家介紹了關(guān)于JS監(jiān)聽dom高度變化幾種常用方法的相關(guān)資料,需要的朋友可以參考下2023-10-10javascript驗(yàn)證身份證完全方法具體實(shí)現(xiàn)
下面這段代碼完全實(shí)現(xiàn)了判斷身份證是否合格.傳入身份證號碼就行了。包括了公安部的算法。下面的是用Ext實(shí)現(xiàn)的。但是基于javascript的語法居多,基本都可以用2013-11-11JavaScript自動內(nèi)存管理與垃圾回收策略詳細(xì)分析講解
JS的垃圾回收機(jī)制是為了以防內(nèi)存泄漏,內(nèi)存泄漏的含義就是當(dāng)已經(jīng)不需要某塊內(nèi)存時這塊內(nèi)存還存在著,垃圾回收機(jī)制就是間歇的不定期的尋找到不再使用的變量,并釋放掉它們所指向的內(nèi)存。因?yàn)閮?nèi)存的大小是有限的,所以當(dāng)內(nèi)存不再需要的時候,我們需要對其進(jìn)行釋放2023-01-01