在JavaScript中连接字符串或数组是否更快?

时间:2016-04-27 12:35:00

标签: javascript arrays string concatenation string-concatenation

哪个更快?

var str = '';
for(var i=0; i<1000; i++) {
    str += i;
}

var arr = [];
for(var i=0; i<1000; i++) {
    arr.push(i);
}
var str = arr.join(''); 

我问,因为我编写了一个非常好用的CSS解析器,但对于较大的样式表(可以理解)非常慢。我试图找到使其更快的方法,我想知道这是否会有所作为。提前谢谢!

3 个答案:

答案 0 :(得分:0)

console.time('a')
var str = '';
for(var i=0; i<10000; i++) {
    str += i;
}
console.timeEnd('a')

VM474:6 a:1.940ms

console.time('a')
var arr = [];
for(var i=0; i<10000; i++) {
    arr.push(i);
}
var str = arr.join('');
console.timeEnd('a')

VM476:7 a:2.542ms

答案 1 :(得分:0)

更快地进行字符串连接(this thread解释了原因)这可以通过这个简单的测试来证明

function f1() {
  var str = '';
  for (var i = 0; i < 1000; i++) {
    str += i;
  }
}

function f2() {
  var arr = [];
  for (var i = 0; i < 1000; i++) {
    arr.push(i);
  }
  var str = arr.join('');
}


var startTime = new Date();
for (var counter = 0; counter < 10000; counter++) {
  f1()
}
var endTime = new Date();
alert("String-concate Time Diff = " + (endTime - startTime));


var startTime = new Date();
for (var counter = 0; counter < 10000; counter++) {
  f2()
}
var endTime = new Date();
alert("Array join Time Diff = " + (endTime - startTime));

正如您所见,字符串连接占用了Array-join所用时间的1/3。

答案 2 :(得分:0)

我做了一些基准测试,如下所示。看起来字符串的长度在这里很重要,特别是对于Array.prototype.join()操作。除非必要,否则不应该用于字符串连接。

String concat:

var t = 0,
    p = 0,
    s = "",
    i = 0;
while (t<=1000) {
	p = performance.now();
	s +=i;
	t += performance.now()-p;
	i++;
}
document.write("<pre> Done " + i + " string concat op/s</pre>");

Array.push()+ Array.join()

var t = 0,
p = 0,
a = [],
s = "",
i = 0;
while (t<=1000) {
p = performance.now();
a.push(i)
s = a.join("")
t += performance.now()-p;
i++;
}
document.write("<pre> Done " + i + " Array.push() + Array.join() op/s</pre>");