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运算后丢失。另一方面,如果我们一直将数组保留在作用域中,并且不重用它,那将是一个很好的解决方案。
我个人想要最简单的解决方案:仅使用+ =运算符。
通过缓冲,我们可能会获得更高的速度。