当前位置:  开发笔记 > 编程语言 > 正文

+ String运算符的性能低于StringBuffer.append()

如何解决《+String运算符的性能低于StringBuffer.append()》经验,为你挑选了8个好方法。

在我的团队中,我们通常会像这样进行字符串连接:

var url = // some dynamically generated URL
var sb = new StringBuffer();
sb.append("click here");

显然,以下内容更具可读性:

var url = // some dynamically generated URL
var sb = "click here";

但JS专家声称,+操作员的表现不如StringBuffer.append().这是真的吗?



1> Eric Schoono..:

你的例子不是一个好的例子,因为表现不太可能显着不同.在您的示例中,可读性应该优于性能,因为一个与另一个的性能增益可以忽略不计.只有在进行多次连接时,数组(StringBuffer)的好处才会显而易见.即使这样,您的里程也可能取决于您的浏览器.

这是一个详细的性能分析,它显示了在许多不同浏览器中使用所有不同JavaScript连接方法的性能; 字符串性能分析

join()一次,concat()一次,join()for,+ = for,concat()for

更多:
Ajaxian >> IE中的字符串性能:Array.join vs + = continue


关于图表,如果不明显; 越低越好.
@Chris,那不是真的.比较**IE7**中的这两个小提琴:http://jsfiddle.net/9uS4n/5/(快速)与http://jsfiddle.net/9uS4n/2/(慢).使用`join()`技术,性能似乎至少提高了1000倍.

2> pcorcoran..:

Internet Explorer是当今世界上唯一真正受此影响的浏览器.(版本5,6和7是狗慢.8没有显示相同的退化.)而且,IE变得越来越慢,你的字符串越长.

如果你有连接的长字符串,那么肯定使用array.join技术.(或者为了便于阅读,可以使用一些StringBuffer包装.)但如果你的字符串很短,请不要打扰.



3> Michael Hare..:

是的,这是真的,但你不应该在乎.选择一个更容易阅读的.如果您必须对应用程序进行基准测试,请关注瓶颈.

我猜想字符串连接不会成为你的瓶颈.



4> Frank Kruege..:

同意迈克尔哈伦.

如果性能确实是一个问题,还要考虑使用数组和连接.

var buffer = ["click here"];
buffer.push("More stuff");
alert(buffer.join(""));


我知道已经选择了正确答案,但这个答案有一个更有用的例子.

5> Rahul..:

试试这个:

var s = ["click here"].join("");



6> Quentin..:

JavaScript没有本机StringBuffer对象,所以我假设这是来自您正在使用的库,或者是一个不寻常的主机环境(即不是浏览器)的功能.

我怀疑一个库(用JS编写)会产生更快的速度,尽管可能是原生的StringBuffer对象.可以通过分析器找到明确的答案(如果您在浏览器中运行,那么Firebug将为您提供Firefox中的JS引擎的分析器).



7> 小智..:

就像已经有一些用户注意到的那样:这与小字符串无关.

Firefox,Safari或Google Chrome中的新JavaScript引擎进行了优化

"click here";

和...一样快

["click here"].join("");



8> William Kell..:

用Knuth的话说,"过早的优化是万恶之源!" 任何一种方式的微小差异最终都不会产生太大影响; 我会选择更具可读性的.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有