这篇文章主要介绍了有关 js 对字符串数组进行拼接的性能问题,字符串连接一直是 js 中性能最低的操作之一,应该如何解决呢?请参看本文的介绍
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
我们知道,在 js 中,字符串连接是性能最低的操作之一。
例如:
- var text="Hello";
- text+=" World!";
早期浏览器没有对这种运算进行优化。
由于字符串是不可变的,这意味着要创建中间字符串来存储连接的结果。频繁地在后台创建和销毁字符串导制性能异常低下。
因此,可以利用数组对象进行优化。
例如:
- var buffer = [],
- i = 0;
- buffer[i++] = "Hello"; //通过相应索引值添加元素比push方法快
- buffer[i++] = " World!";
- var text = buffer.join("");
在早期的浏览器中,没有创建和销毁中间字符串,在大量字符串连接情况下,这技术已被证明远快于使用加法方式。
如今浏览器对字符串的优化已经改变了字符串相连的局面。Safari、Opera、Chrome、Firefox 和 IE8 都在使用加法运算符上表现出了更好的性能。但是,IE8 之前的版本没有优化,因此数组方法依然有效。这并不意味着字符串相连时我们要进行浏览器检测。在决定如何连接时要考虑的是字符串的大小和数量。
当字符串相对较小(小于 20 字符)且连接数量也较小时 (小于 1000 个),所有的浏览器使用加法运算符都能在不到 1 毫秒内轻松完成连接。增加字符串数量或大小时,IE7 中性能会明显下降。字符串大小增加时,Firefox 中加法运算符和数组成技巧性能差异会变小。字符串数量增加时,Safari 中加法运算符和数组成技巧性能差异会变小。改变字符串数量或大小时,Chrome 和 Opera 中加法运算符一直保持领先优势。
所以,由于在各浏览器下性能不一致,选用技术取决于实际情况和面对的浏览器。
大多数情况下,加法运算符是首选;如果用户主要使用 IE6 或 7,并且字符串大小较大或数量较多时,那么数组技术就很值得。
一般情况下,如果是语义性的字符串,不应该使用 Array,比如:
'Hello, my name is' + name;
如果字符串是 "相似情况的重复" 的话,建议使用 Array,比如:
- var array = [];
- for (i = 0; i < length; i++) {
- array[i] = '<li>' + list[i] + '</li'>;
- }
- document.getElementById('somewhere').innerhtml = array.join('\n');
有关 js 字符串数组连接的性能比较,就介绍到这里了,希望对大家有所帮助。
来源: