哪个更快?
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解析器,但对于较大的样式表(可以理解)非常慢。我试图找到使其更快的方法,我想知道这是否会有所作为。提前谢谢!
答案 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>");