JavaScript中String和StringBuffer的速度之爭(zhēng)
更新時(shí)間:2010年04月01日 16:52:57 作者:
很多Javascript書籍中都是類比于Java說(shuō)String在頻繁的和大量的字符串連接方面的效率是不如StringBuffer的。
顯示情況時(shí)Javascript中并沒(méi)有StringBuffer類,一種主流的Javascript StringBuffer類的實(shí)現(xiàn)是通過(guò)prototype構(gòu)造一個(gè)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)在讓我們寫一個(gè)測(cè)試用例:
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)在讓我們來(lái)測(cè)試下,看看會(huì)有什么發(fā)生:
IE8:
Sting use time:11ms
StringBuffer use time:47ms
結(jié)果是StringBuffer不但沒(méi)有比String效率高,反而使低了不少。難道是前輩們錯(cuò)了?
那讓我們?cè)僭趧e的瀏覽器中看看吧:
IE7:
Sting use time:266ms
StringBuffer use time:78ms
IE7中StringBuffer的優(yōu)勢(shì)很明顯。
可以看到,在現(xiàn)在的主流瀏覽器中,都對(duì)String類的字符串連接作了優(yōu)化,所以性能要好于自定義的StringBuffer類,但是在比較老的瀏覽器中,StringBuffer類的優(yōu)勢(shì)仍然很明顯。具體在實(shí)際中就需要對(duì)瀏覽器進(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)在讓我們寫一個(gè)測(cè)試用例:
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)在讓我們來(lái)測(cè)試下,看看會(huì)有什么發(fā)生:
IE8:
Sting use time:11ms
StringBuffer use time:47ms
結(jié)果是StringBuffer不但沒(méi)有比String效率高,反而使低了不少。難道是前輩們錯(cuò)了?
那讓我們?cè)僭趧e的瀏覽器中看看吧:
IE7:
Sting use time:266ms
StringBuffer use time:78ms
IE7中StringBuffer的優(yōu)勢(shì)很明顯。
可以看到,在現(xiàn)在的主流瀏覽器中,都對(duì)String類的字符串連接作了優(yōu)化,所以性能要好于自定義的StringBuffer類,但是在比較老的瀏覽器中,StringBuffer類的優(yōu)勢(shì)仍然很明顯。具體在實(shí)際中就需要對(duì)瀏覽器進(jìn)行判斷。
相關(guān)文章
javascript 導(dǎo)出數(shù)據(jù)到Excel(處理table中的元素)
最近做的項(xiàng)目中有個(gè)要求,需要將數(shù)據(jù)導(dǎo)出到Excel中,關(guān)于這個(gè)就不是什么問(wèn)題,網(wǎng)上的資料很多??僧?dāng)Table中有Input(text)之類的元素是怎么辦?2009-12-12微信小程序地圖繪制線段并且測(cè)量(實(shí)例代碼)
這篇文章主要介紹了微信小程序地圖繪制線段并且測(cè)量,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01JS監(jiān)聽dom高度變化幾種常用方法總結(jié)
我們?cè)陂_發(fā)中會(huì)遇到一些需求,需要監(jiān)聽元素變化,比如元素屬性變化,元素大小變化,這篇文章主要給大家介紹了關(guān)于JS監(jiān)聽dom高度變化幾種常用方法的相關(guān)資料,需要的朋友可以參考下2023-10-10javascript驗(yàn)證身份證完全方法具體實(shí)現(xiàn)
下面這段代碼完全實(shí)現(xiàn)了判斷身份證是否合格.傳入身份證號(hào)碼就行了。包括了公安部的算法。下面的是用Ext實(shí)現(xiàn)的。但是基于javascript的語(yǔ)法居多,基本都可以用2013-11-11js 判斷各種數(shù)據(jù)類型的簡(jiǎn)單方法(推薦)
下面小編就為大家?guī)?lái)一篇js 判斷各種數(shù)據(jù)類型的簡(jiǎn)單方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08JavaScript自動(dòng)內(nèi)存管理與垃圾回收策略詳細(xì)分析講解
JS的垃圾回收機(jī)制是為了以防內(nèi)存泄漏,內(nèi)存泄漏的含義就是當(dāng)已經(jīng)不需要某塊內(nèi)存時(shí)這塊內(nèi)存還存在著,垃圾回收機(jī)制就是間歇的不定期的尋找到不再使用的變量,并釋放掉它們所指向的內(nèi)存。因?yàn)閮?nèi)存的大小是有限的,所以當(dāng)內(nèi)存不再需要的時(shí)候,我們需要對(duì)其進(jìn)行釋放2023-01-01