Javascript字符串连接比本示例更快吗?

时间:2020-03-06 14:55:34  来源:igfitidea点击:

我必须在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(”));

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

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

解决方案

我认为我们已经接近最佳状态。 YMMV,在主机进程(例如浏览器)的JavaScript引擎中会获得或者失去很多速度。

JavaScript字符串串联问题有一个公认的答案,可以链接到JavaScript字符串串联性能的很好比较。

编辑:
我本以为我们可以按照本文的建议使用Duff的设备来获得更多性能。

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

据我所知,算法很好,被认为是字符串连接问题的一种高性能解决方案。

换行:

sbuffer.push(数据到这里... bla ...); `

sbuffer [sbuffer.length] =数据到这里... bla ...; `

会给我们5-50%的速度增益(取决于浏览器,在IE中增益最高)

问候。

当心IE坏垃圾收集器!使用完后,我们想对阵列做什么?可能会得到GC?

我们可以在通过联接进行连接时获得性能,然后在后GC运算后丢失。另一方面,如果我们一直将数组保留在作用域中,并且不重用它,那将是一个很好的解决方案。

我个人想要最简单的解决方案:仅使用+ =运算符。

通过缓冲,我们可能会获得更高的速度。