今天看了javascript高级程序设计,其中注意到字符串连接性能问题的谈论.感觉以前自己写的程序只讲简单但是没有注意到性能问题.其中,在javascript中用的最多的字符串连接就有最大的问题.
例如:
var str = "hello";
str += "world";
大家可能使用最普遍的就是这种了,实际上,这段代码在幕后执行的步骤如下:
1, 创建存储"hello"的字符串.
2. 创建存储"world"的字符串.
3.创建存储连接结果的字符串.
4. 把str的当前内容复制到结果中.
5.把"world"复制的结果中.
6.更新str,使它指向结果.
大家不难看出:每次完成字符串连接都会执行步骤2到6,使得这种操作非常消耗资源.如果重复这一过程几百次,甚至几千次,就会造成性能问题.所以,以后一定要注意,别做毫无意义的消耗...
既然有问题,那就要解决.解决方法就是用Array对象存储字符串,然后用join()方法(参数是空字符串)创建最后的字符串.
例如:
var arr = new Array;
arr[0] = "hello";
arr[1] = "world";
var str = arr.join("");
这样,无论在数组中引入多少字符串都不成问题,因为只在调用join()方法时才会发生连接操作.执行的步骤:
1. 创建存储结果的字符串.
2. 把每个字符串复制到结果中的合适位置.
当然,我们可以使它更容易理解一些,可以用StringBuffer类打包该功能:
上述代码很容易理解,就不用多说,下面着重看一下,两种方法的性能比较.(用事实说话哟)^_^
下面代码测试StringBuffer对象和传统的字符串连接方法的性能比较:
经过上述测试结果应该说明使用StringBuffer类比使用加号可节省50%-66%的时间.
我的一段代码,600多条的数据循环想加。改成stringBuffer后速度从19秒到了2秒