JavaScript中的高性能字符串连接

连接或连接字符串是任何编程语言中的重要功能。 这在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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值