连接或连接字符串是任何编程语言中的重要功能。 这在Web应用程序中尤其重要,因为通常会使用字符串来生成HTML输出。 几种语言提供了快速的字符串处理类,例如.NET中的StringBuilder和Java中的StringBuffer / StringBuilder。
有许多方法可以在JavaScript中串联字符串:
str = "a" + "b";
str += "c";
str = str.concat("d", "e");
您还可以连接字符串数组:
str = ["a", "b", "c", "d", "e"].join("");
如果仅连接几个字符串,则应使用最实用的方法。 在所有浏览器中,性能的提高或降低都可以忽略不计。
连接多个字符串
考虑以下功能相同的示例。 第一个使用字符串串联运算符:
// standard string append
var str = "";
for (var i = 30000; i > 0; i--) {
str += "String concatenation. ";
}
第二种使用数组联接:
// array join
var str = "", sArr = [];
for (var i = 30000; i > 0; i--) {
sArr[i] = "String concatenation. ";
}
str = sArr.join("");
哪个执行速度最快?
一些开发人员会认为串联运算符会更快,因为它使用更少的代码并且不需要将内存需求加倍的数组。 对于其他人来说,传统观点认为数组联接更快— JavaScript解释器中的内存效率更高。
事实要复杂得多。 在所有最新的浏览器中,这两种方法都很快速,并且将在中型PC上在80ms内完成。 这是我自己完全不科学的基准测试的结果:
- Chrome 6.0 :标准的字符串附加通常比数组连接快,但是两者都可以在不到10ms的时间内完成。
- Opera 10.6 :同样,标准附加操作更快,但是区别很小-通常为15ms,而数组联接为17ms。
- Firefox 3.6 :这两种方法的浏览器通常需要30毫秒左右的时间。 数组连接通常具有边缘,但只有几毫秒。
- IE 8.0 :标准附加需要30毫秒,而数组联接则需要两倍以上的时间(通常为70毫秒)。
- Safari 5.0.1 :奇怪的是,一个标准的附加操作花费的时间不超过5毫秒,但是数组连接的速度(55毫秒)要慢十倍以上。
最新的JavaScript引擎针对字符串连接运算符进行了优化。 阵列联接保持快速,但是没有性能提升。
美中不足
IE7是世界上使用次数最多的浏览器,市场份额为14%。 IE6占了另外8%。 如果您不再支持这些老化的应用程序,则无需进一步阅读。
还在? 令人震惊的是:IE7及以下版本使用串联处理程序,该处理程序重复复制字符串并导致时间和内存使用量成指数增长。 使用串联运算符执行的代码大约需要2.5分钟(150,000毫秒)的时间执行,并且浏览器始终无响应。 相比之下,阵列连接可以在200毫秒内完成-快了800倍。
如果您支持IE7,则数组联接仍然是连接大量字符串的最佳方法。
那PHP呢? 敬请期待,以获取测试结果…
From: https://www.sitepoint.com/javascript-fast-string-concatenation/