采购部的岗位职责:javascript中字符串连接时用Array.join()替换 string = "xx",换来几十倍的速度提升

来源:百度文库 编辑:九乡新闻网 时间:2024/07/02 18:46:26

javascript中字符串连接时用Array.join()替换 string += "xx",换来几十倍的速度提升

2006-12-31 21:38by无常,6237visits,收藏,编辑下面的二个函数compute1()和compute1(),都是将50000个字符串连接起来,
直接用+=连接耗时17547毫秒,
使用Array.join()耗时234毫秒,比前者快了近75倍!

而且使用+=操作的话,随着循环次数的增加,耗用时间是nn倍的上升,循环30000次时近60秒,
而用Array.join循环50000次才是843毫秒。

javascript的string是固定内存的,每次对字符串的修改操作都会导致重新分配内存,速度当然慢了。
c#中的string也是固定分配内存的,所以在做多字符串连接时一定要记得StringBuilder哦.




    Untitled Page



    
    开始时间: 结束时间:
    耗时:
    
    开始时间:结束时间:
    耗时:
    



function compute1()
{
    var start = new Date();
    window.document.all.Text1.value =start.getSeconds() * 1000 + start.getMilliseconds();
    str = "";
    for( i=0; i<20000; i++)
    {
        str += "wuchang@guet.edu.cn";
    }
    var end = new Date();
    window.document.all.Text2.value =end.getSeconds() * 1000 + end.getMilliseconds();
    window.document.all.Text3.value = Number(window.document.all.Text2.value) -Number(window.document.all.Text1.value); 
    
}

function compute2()
{
    var start = new Date();
    window.document.all.Text4.value =start.getSeconds() * 1000 + start.getMilliseconds();
    str = new StringBuilder();
    for( i=0; i<200000; i++)
    {
        str.Append("wuchang@guet.edu.cn");
    }
    var end = new Date();
    window.document.all.Text5.value =end.getSeconds() * 1000 + end.getMilliseconds();
    window.document.all.Text6.value = Number(window.document.all.Text5.value) -Number(window.document.all.Text4.value); 
    
}

function StringBuilder(str)
{
    this.tmp = new Array();        
}
StringBuilder.prototype.Append= function(value)
{
    this.tmp.push(value);
    return this;
}
StringBuilder.prototype.Clear = function()
{
    tmp.length=1;
}
StringBuilder.prototype.toString = function()
{
    return this.tmp.join('');
}