Javascript中String和StringBuffer的速度之爭——dream參考之三

很多Javascript書籍中都是類比於Java說String在頻繁的和大量的字符串連接方面的效率是不如StringBuffer的。

    顯示情況時Javascript中並沒有StringBuffer類,一種主流的Javascript StringBuffer類的實現是通過prototype構造一個StringBuffer類。

    StringBuffer.js

    Code begin:

     function StringBuffer(){

        this.content = new Array;

    }

    StringBuffer.prototype.append = function( str ){

        this.content.push( str );

    }

    StringBuffer.prototype.toString = function(){

        return this.content.join("");

    }

    Code end

    現在讓我們寫一個測試用例:

    TestStringBUffer.html

    Code begin

    <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" οnclick="testStringBuffer()"/>

    </body>

</html>

現在讓我們來測試下,看看會有什麼發生:

IE8:

Sting use time:11ms

StringBuffer use time:47ms

結果是StringBuffer不但沒有比String效率高,反而使低了不少。難道是前輩們錯了?

那讓我們再在別的瀏覽器中看看吧:

IE7:

Sting use time:266ms 
StringBuffer use time:78ms

IE7中StringBuffer的優勢很明顯。

可以看到,在現在的主流瀏覽器中,都對String類的字符串連接作了優化,所以性能要好於自定義的StringBuffer類,但是在比較老的瀏覽器中,StringBuffer類的優勢仍然很明顯。具體在實際中就需要對瀏覽器進行判斷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章