我必须在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(”));
不要注意循环或构建示例的其他“复杂”代码。
我的问题是:对于未知数量的字符串,您是否有更快的算法/方法/想法将许多小字符串连接到一个巨大的字符串?
答案 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获得更快的速度。