String.concat是否比Array方法更慢地连接字符串 [英] Is String.concat slower than Array approach to join strings

查看:102
本文介绍了String.concat是否比Array方法更慢地连接字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆