JavaScript中String和StringBuffer的速度之爭
更新時間:2010年04月01日 16:52:57 作者:
很多Javascript書籍中都是類比于Java說String在頻繁的和大量的字符串連接方面的效率是不如StringBuffer的。
顯示情況時Javascript中并沒有StringBuffer類,一種主流的Javascript StringBuffer類的實現(xiàn)是通過prototype構造一個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
結果是StringBuffer不但沒有比String效率高,反而使低了不少。難道是前輩們錯了?
那讓我們再在別的瀏覽器中看看吧:
IE7:
Sting use time:266ms
StringBuffer use time:78ms
IE7中StringBuffer的優(yōu)勢很明顯。
可以看到,在現(xiàn)在的主流瀏覽器中,都對String類的字符串連接作了優(yōu)化,所以性能要好于自定義的StringBuffer類,但是在比較老的瀏覽器中,StringBuffer類的優(yōu)勢仍然很明顯。具體在實際中就需要對瀏覽器進行判斷。
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
結果是StringBuffer不但沒有比String效率高,反而使低了不少。難道是前輩們錯了?
那讓我們再在別的瀏覽器中看看吧:
IE7:
Sting use time:266ms
StringBuffer use time:78ms
IE7中StringBuffer的優(yōu)勢很明顯。
可以看到,在現(xiàn)在的主流瀏覽器中,都對String類的字符串連接作了優(yōu)化,所以性能要好于自定義的StringBuffer類,但是在比較老的瀏覽器中,StringBuffer類的優(yōu)勢仍然很明顯。具體在實際中就需要對瀏覽器進行判斷。
相關文章
window.parent調用父框架時 ie跟火狐不兼容問題
window.parent調用父框架時,ie跟火狐不兼容問題!2009-07-07
JavaScript實現(xiàn)簡單的文本逐字打印效果示例
這篇文章主要介紹了JavaScript實現(xiàn)簡單的文本逐字打印效果,涉及javascript結合時間函數(shù)動態(tài)操作頁面元素相關實現(xiàn)技巧,需要的朋友可以參考下2018-04-04
兩種常用的javascript數(shù)組去重方法思路及代碼
第一種是常規(guī)的方法:建一個新的數(shù)組存放結果,for循環(huán)中每次從原數(shù)組中取出一個元素,用indexOf查找新數(shù)組中是否有該元素,至于第二種詳細的看下本文哦2013-03-03
JavaScript實現(xiàn)鼠標滑過處生成氣泡的方法
這篇文章主要介紹了JavaScript實現(xiàn)鼠標滑過處生成氣泡的方法,涉及鼠標事件與頁面樣式的相關操作技巧,需要的朋友可以參考下2015-05-05
微信小程序ReferenceError:xxx?is?not?defined報錯解決辦法
最近在學習微信小程序的開發(fā),在一個練手項目中竟然報錯,所以下面這篇文章主要給大家介紹了關于微信小程序ReferenceError:xxx?is?not?defined報錯的解決辦法,需要的朋友可以參考下2023-12-12

