Javascript中String和StringBuffer的速度之争——dream参考之三

来源:互联网 发布:网络调查软件 编辑:程序博客网 时间:2024/04/28 10:07

很多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" onclick="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类的优势仍然很明显。具体在实际中就需要对浏览器进行判断。