Javascript字符串连接比这个例子更快?

时间:2008-09-30 14:46:52

标签: javascript performance join

我必须在Javascript中连接一堆字符串,并且我正在寻找最快的方法。让我们假设Javascript必须创建一个大的XML-“文件”,当然,它由许多小字符串组成。所以我想出了:

    var sbuffer = [];
    for (var idx=0; idx<10000; idx=idx+1) {
        sbuffer.push(‘<xmltag>Data comes here... bla... </xmltag>’);
    }
    // Now we "send" it to the browser...
    alert(sbuffer.join(”));

不要注意循环或构建示例的其他“复杂”代码。

我的问题是:对于未知数量的字符串,您是否有更快的算法/方法/想法将许多小字符串连接到一个巨大的字符串?

7 个答案:

答案 0 :(得分:15)

问题JavaScript string concatenation有一个已接受的答案,链接到very good comparison of JavaScript string concatenation performance

修改 我想如你所说,你可以通过使用Duff的设备来提高性能。

答案 1 :(得分:13)

更改行:

sbuffer.push(‘Data comes here... bla... ’);

sbuffer[sbuffer.length] = ‘Data comes here... bla... ’;

将为您提供5-50%的速度增益(取决于浏览器,在IE中 - 增益将是最高的)

问候。

答案 2 :(得分:1)

我认为你非常接近最佳状态。 YMMV,在主机进程的JavaScript引擎(例如浏览器)中获得或丢失了很多速度。

答案 3 :(得分:1)

我认为将字符串推送到数组然后加入数组是JavaScript中字符串连接的最快技术。这个discussion about W3C DOM vs. innerHTML中有一些支持性证据。注意innerHTML 1和innerHTML 2结果之间的区别。

答案 4 :(得分:1)

据我所知,您的算法很好,并且被称为字符串连接问题的高效解决方案。

答案 5 :(得分:0)

小心IE坏垃圾收集器!使用后你想对你的阵列做什么?可能它会得到GC吗?

你可以获得与联接连接的性能,然后在后GC的时候输掉。另一方面,如果您一直将数组放在范围内,并且不重复使用,那么这可能是一个很好的解决方案。

就个人而言,我想要最简单的解决方案:只使用+ =运算符。

答案 6 :(得分:0)

你可以通过buffering获得更快的速度。