在Javascript中,字符串拼接的效率有多低效?

6
例如
var myName = 'Bob';
myName += ' is a good name';

对于这种长时间操作,有没有更好的方法来处理呢?也许可以使用StringBuffer这样的结构?谢谢! :)
4个回答

5
“更好的方法是:”
var nameparts= ['Bob'];
nameparts.push(' is a good name');
...
nameparts.join('');

然而,大多数现代JavaScript实现现在都可以检测到简单的连接,并且在许多情况下可以优化掉它,因为很多人(遗憾地)以这种方式编写代码。因此,在实践中,“好”的方法今天不会比过去快得多。


没错 - 我认为用狭隘的优化技巧来破坏美好的代码是一件遗憾的事情。话虽如此,IE6在某些情况下真的非常慢,这个特定的技巧确实值得掌握。对于两三个连接操作来说,这样做有点儿愚蠢,但对于低至几百的数字来说,它可以产生惊人的差异。 - Pointy
你有可优化此项的实现列表吗? - bobber205
我正在修改一些旧的JS代码,根据Firebug显示,占用40%执行时间的函数主要是字符串拼接。 - bobber205

1
仅仅使用中间字符串就可以获得巨大的性能提升!在JavaScript中创建类似StringBuffer的类,可以获得更多的性能提升。请查看完整的文章和图表here

1

字符串拼接的效率取决于您使用的浏览器。您可以在谷歌上搜索统计数据,YouTube 上也有 GoogleTalk。据我所知,大多数浏览器在元素数量低于几千个时都能有效地处理字符串拼接。此后,IE 的速度会呈指数级下降,而 Firefox、Chrome 和 Safari 的表现要好得多。随着 IE9 的推出,这种情况可能会发生改变。


0

我曾经读过一篇关于这个主题的文章,其中提供了一些用数组构建缓冲字符串的代码:

http://www.softwaresecretweapons.com/jspwiki/javascriptstringconcatenation

我亲自测试过,它在IE中运行速度要快得多...而在Firefox中则慢得多!

总之:有很多JavaScript引擎存在,我们不能真正依赖这种实现细节。如果这是一个问题,你会注意到的。在那之前,不要太在意。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接