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

Dón*_*nal 90 javascript string concatenation

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

var url = // some dynamically generated URL
var sb = new StringBuffer();
sb.append("<a href='").append(url).append("'>click here</a>");
Run Code Online (Sandbox Code Playgroud)

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

var url = // some dynamically generated URL
var sb = "<a href='" + url + "'>click here</a>";
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*ver 102

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

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

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

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

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

pco*_*ran 46

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

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


Mic*_*ren 37

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

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


Fra*_*ger 31

同意迈克尔哈伦.

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

var buffer = ["<a href='", url, "'>click here</a>"];
buffer.push("More stuff");
alert(buffer.join(""));
Run Code Online (Sandbox Code Playgroud)

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

Rah*_*hul 18

试试这个:

var s = ["<a href='", url, "'>click here</a>"].join("");
Run Code Online (Sandbox Code Playgroud)


Que*_*tin 8

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

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


小智 7

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

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

"<a href='" + url + "'>click here</a>";
Run Code Online (Sandbox Code Playgroud)

和...一样快

["<a href='", url, "'>click here</a>"].join("");
Run Code Online (Sandbox Code Playgroud)


Wil*_*ler 6

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