JavaScript使用数组拼接字符串性能如何?

传统上,字符串连接一直是js中性能最低的操作之一。

view source

print?

1 var text="Hello";
2 text+=" World!";

早期浏览器没有对这种运算进行优化。由于字符串是不可变的,这意味着要创建中间字符串来存储连接的结果。频繁地在后台创建和销毁字符串导制性能异常低下。

发现这一点后,开发者们利用数组对象进行优化。句容市鄂茂钢铁

view source

print?

1 var buffer=[],i=0;
2 buffer[i++]="Hello";    //通过相应索引值添加元素比push方法快
3 buffer[i++]=" World!";
4 var text=buffer.join("");

在早期的浏览器中,没有创建和销毁中间字符串,在大量字符串连接情况下,这技术已被证明远快于使用加法方式。

如今浏览器对字符串的优化已经改变了字符串相连的局面。Safari、Opera、Chrome、Firefox和IE8都在使用加法运算符上表现出了更好的性能。但是,IE8之前的版本没有优化,因此数组方法依然有效。这并不意味着字符串相连时我们要进行浏览器检测。在决定如何连接时要考虑的是字符串的大小和数量。

当字符串相对较小(小于20字符)且连接数量也较小时(小于1000个),所有的浏览器使用加法运算符都能在不到1毫秒内轻松完成连接。增加字符串数量或大小时,IE7中性能会明显下降。字符串大小增加时,Firefox中加法运算符和数组成技巧性能差异会变小。字符串数量增加时,Safari中加法运算符和数组成技巧性能差异会变小。改变字符串数量或大小时,Chrome和Opera中加法运算符一直保持领先优势。

所以,由于在各浏览器下性能不一致,选用技术取决于实际情况和面对的浏览器。

大多数情况下,加法运算符是首选;如果用户主要使用IE6或7,并且字符串大小较大或数量较多时,那么数组技术就很值得。

一般情况下,如果是语义性的字符串,不应该使用Array,比如

view source

print?

1 ‘Hello, my name is ‘ + name;

如果字符串是"相似情况的重复"的话,建议使用Array,比如

view source

print?

1 var array = [];
2 for (i = 0; i < length; i++) {
3 array[i] = ‘<li>‘ + list[i] + ‘</li‘>;
4 }
5 document.getElementById(‘somewhere‘).innerHTML = array.join(‘n‘);
时间: 2024-12-16 21:28:34

JavaScript使用数组拼接字符串性能如何?的相关文章

javascript基础--数组,字符串操作,Math函数

数据的操作方法: 1 var arr = [1,2,3,4,5]; 2 3 arr.push(6,7);//可以在数组的最后一位开始添加数列(1+);并返回数组的长度. 4 5 arr.pop();//删除数组的最后一位.并返回那一位数组的内容. 6 7 arr.shift();//删除数组的第0位,并返回那一位数组的内容. 8 9 arr.unshift(-1,0);//从数组的第0位前,添加数列,并返回数组的长度. 10 11 arr.join('');//将每列数组按照指定的符号或者不设置

javascript中数组和字符串的方法比较

前面的话 字符串和数组有很多的相同之处,它们的方法众多,且相似度很高:但它们又有不同之处,字符串是不可变值,于是可以把其看作只读的数组.本文将对字符串和数组的类似方法进行比较 可索引 ECMAScript5定义了一种访问字符的方法,使用方括号加数字索引来访问字符串中的特定字符 可索引的字符串的最大的好处就是简单,用方括号代替了charAt()调用,这样更加简洁.可读并且可能更高效.不仅如此,字符串的行为类似于数组的事实使得通用的数组方法可以应用到字符串上 如果参数超出范围或是NaN时,则输出un

javascript基础数组,字符串的操作和冒泡函数等

 数组 var arr = new Array(2,1,5,6,7,4,9); var arr2 = Array(1,2,"33"); //省略new来创建数组 var arr3 = [1,2,"33"]; //通过常量来创建数组 Math.random(); //0~1之间任意的数. for(var i in arr){document.write(arr[i]+" ");} //另一种遍历arr的方式.这个方法要比for循环效率高 1.栈结构

Java数组拼接字符串几个写法性能比较(转载)

将数组 int[] arr = {0,1,2,3,4,5,6,7,8,9} 拼接成 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 字符串: StringBuilder sb = new StringBuilder(arr.length*3); // StringBuilder(arr.length*3)性能比StringBuilder()高sb.append("["); // 写法1for( int i = 0, len = arr.length; i < len

【转】Java 5种字符串拼接方式性能比较。

最近写一个东东,可能会考虑到字符串拼接,想了几种方法,但对性能未知,于是用Junit写了个单元测试. 代码如下: import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestS

Java 5种字符串拼接方式性能比较

http://blog.csdn.net/kimsoft/article/details/3353849 import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestStrin

三大类库(一)之字符串性能分析

一.分析 String类字符串追加 当我们对字符串进行拼接时,String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String 是sealed 类,即不能被继承.   string是String类的别名,引用类型,且该类型是只读的,不可修改,当你修改字符串内容时,实际上是创建了另一个新的字符串并将引用指向了它,你可以参考String类型的构造函数说明,就明白错在哪里了.第一条只是创建了一

JS中数组实现(倒序遍历数组,数组连接字符串)

// =================== 求最大值===================================== <script> var arr = [10,35,765,21345,678,89]; var max = arr [0]; for (var i=0;i< arr.length;i++) { if (max<arr[i]){ max = arr [i]; } } console.log("最大值:" + max); </sc

JS中数组实现 ——— 倒序遍历数组,数组连接字符串

// =================== 求最大值=====================================<script> var arr = [10,35,765,21345,678,89]; var max = arr [0]; for (var i=0;i< arr.length;i++) { if (max<arr[i]){ max = arr [i]; } } console.log("最大值:" + max);</scri