String.concat是否比Array方法更慢地连接字符串 [英] Is String.concat slower than Array approach to join strings
问题描述
JavaScript中的字符串是不可变的。通过网络和这里的Stack Overflow以及,我遇到了连接字符串的数组方法:
Strings in JavaScript are immutable. Across the web and here on Stack Overflow as well, I came across the Array approach to concatenate strings:
var a = [];
a.push(arg1,arg,2....);
console.log(a.join(''));
我知道这种方法比简单的
I know that this approach is better than the simple
console.log(arg1 + arg2 +.....);
出于跳过创建中间对象的原因但是如何更好地对抗:
for reasons of skipping creating intermediate objects but how does it fair better against :
arg1.concat(arg2,arg3.....);
推荐答案
对于它可能的数量,我尝试了以下测试:
For what it may count, I tried the following test:
var stringA = 'someStringA';
var stringB = 'someStringB';
var stringC = 'someStringC';
var arr = [];
arr.push(stringA);
arr.push(stringB);
arr.push(stringC);
// Testing the concat method
i = 0;
console.time('10k concat');
while (i < 10000) {
stringA.concat(stringB, stringC);
i++;
}
console.timeEnd('10k concat');
// Testing the join method
i = 0;
console.time('10k join');
while (i < 10000) {
arr.join('');
i++;
}
console.timeEnd('10k join');
在Mac OS X 10.6.2上获得 Firefox 3.6.3的结果:
Results in Firefox 3.6.3 on Mac OS X 10.6.2:
10k concat: 20ms
10k join: 15ms
10k concat: 20ms
10k join: 16ms
10k concat: 19ms
10k join: 15ms
Mac OS X 10.6.2上的 Chrome 5.0结果:
Results in Chrome 5.0 on Mac OS X 10.6.2:
10k concat: 22ms
10k join: 14ms
10k concat: 20ms
10k join: 16ms
10k concat: 20ms
10k join: 16ms
更新:
如果我们计算 join('')
测试中的数组创建,我们会看到一个不同的故事。测试:
If we were to count the array creation in the join('')
test, we would see a different story. Testing:
var stringA = 'someStringA';
var stringB = 'someStringB';
var stringC = 'someStringC';
// Testing the concat method
i = 0;
console.time('10k concat');
while (i < 10000) {
stringA.concat(stringB, stringC);
i++;
}
console.timeEnd('10k concat');
// Testing the join method
i = 0;
console.time('10k join');
while (i < 10000) {
var arr = [];
arr.push(stringA);
arr.push(stringB);
arr.push(stringC);
arr.join('');
i++;
}
console.timeEnd('10k join');
在Mac OS X 10.6.2上获得 Firefox 3.6.3的结果:
Results in Firefox 3.6.3 on Mac OS X 10.6.2:
10k concat: 20ms
10k join: 40ms
10k concat: 21ms
10k join: 40ms
10k concat: 20ms
10k join: 42ms
Mac OS X 10.6.2上的 Chrome 5.0结果:
Results in Chrome 5.0 on Mac OS X 10.6.2:
10k concat: 20ms
10k join: 55ms
10k concat: 22ms
10k join: 60ms
10k concat: 19ms
10k join: 60ms
这篇关于String.concat是否比Array方法更慢地连接字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!