在我的团队中,我们通常会像这样进行字符串连接:
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()
.这是真的吗?
你的例子不是一个好的例子,因为表现不太可能显着不同.在您的示例中,可读性应该优于性能,因为一个与另一个的性能增益可以忽略不计.只有在进行多次连接时,数组(StringBuffer)的好处才会显而易见.即使这样,您的里程也可能取决于您的浏览器.
这是一个详细的性能分析,它显示了在许多不同浏览器中使用所有不同JavaScript连接方法的性能; 字符串性能分析
更多:
Ajaxian >> IE中的字符串性能:Array.join vs + = continue
Internet Explorer是当今世界上唯一真正受此影响的浏览器.(版本5,6和7是狗慢.8没有显示相同的退化.)而且,IE变得越来越慢,你的字符串越长.
如果你有连接的长字符串,那么肯定使用array.join技术.(或者为了便于阅读,可以使用一些StringBuffer包装.)但如果你的字符串很短,请不要打扰.
是的,这是真的,但你不应该在乎.选择一个更容易阅读的.如果您必须对应用程序进行基准测试,请关注瓶颈.
我猜想字符串连接不会成为你的瓶颈.
同意迈克尔哈伦.
如果性能确实是一个问题,还要考虑使用数组和连接.
var buffer = ["click here"]; buffer.push("More stuff"); alert(buffer.join(""));
试试这个:
var s = ["click here"].join("");
JavaScript没有本机StringBuffer对象,所以我假设这是来自您正在使用的库,或者是一个不寻常的主机环境(即不是浏览器)的功能.
我怀疑一个库(用JS编写)会产生更快的速度,尽管可能是原生的StringBuffer对象.可以通过分析器找到明确的答案(如果您在浏览器中运行,那么Firebug将为您提供Firefox中的JS引擎的分析器).
就像已经有一些用户注意到的那样:这与小字符串无关.
Firefox,Safari或Google Chrome中的新JavaScript引擎进行了优化
"click here";
和...一样快
["click here"].join("");
用Knuth的话说,"过早的优化是万恶之源!" 任何一种方式的微小差异最终都不会产生太大影响; 我会选择更具可读性的.