7

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

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

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

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

4

7 回答 7

15

JavaScript 字符串连接问题有一个公认的答案,它链接到JavaScript 字符串连接性能的一个非常好的比较

编辑: 我原以为你可以通过使用 Duff 的设备来获得更多性能,正如文章所建议的那样。

于 2008-09-30T14:52:00.270 回答
13

换行:

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

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

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

问候。

于 2008-09-30T15:45:12.983 回答
1

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

于 2008-09-30T14:50:45.203 回答
1

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

于 2008-09-30T14:53:13.420 回答
1

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

于 2008-09-30T14:55:48.123 回答
0

当心 IE 坏垃圾收集器!使用后您打算如何处理您的阵列?可能它会被GC'd?

您可以在连接连接时获得性能,然后在 GC 后失败。另一方面,如果您始终将数组保留在范围内,而不是重用它,那可能是一个很好的解决方案。

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

于 2008-09-30T18:44:15.720 回答
0

通过缓冲,您可能会获得更快的速度。

于 2008-10-01T06:07:55.747 回答