web-dev-qa-db-fra.com

Array Join vs String Concat

Quelle méthode est plus rapide?

Array Join:

var str_to_split = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
var myarray = str_to_split.split(",");

var output=myarray.join("");

String Concat:

var str_to_split = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
var myarray = str_to_split.split(",");

var output = "";
for (var i = 0, len = myarray.length; i<len; i++){
    output += myarray[i];
}
63
ajax333221

La concaténation de chaînes est plus rapide dans ECMAScript. Voici un repère que j'ai créé pour vous montrer:

http://jsben.ch/#/OJ3vo

42
AlienWebguy

Je peux certainement dire que l'utilisation de Array.join () est plus rapide. J'ai travaillé sur quelques éléments de code JavaScript et accéléré considérablement les performances en supprimant la manipulation des chaînes au profit des tableaux.

8
Ryan Doherty

À partir de 2011 et dans les temps modernes ...

Voir le join rewrite suivant à l'aide de la concaténation de chaînes et combien il est plus lent que l'implémentation standard.

// Number of times the standard `join` is faster, by Node.js versions:
// 0.10.44: ~2.0
// 0.11.16: ~4.6
// 0.12.13: ~4.7
// 4.4.4: ~4.66
// 5.11.0: ~4.75
// 6.1.0: Negative ~1.2 (something is wrong with 6.x at the moment)
function join(sep) {
    var res = '';
    if (this.length) {
        res += this[0];
        for (var i = 1; i < this.length; i++) {
            res += sep + this[i];
        }
    }
    return res;
}

La morale est - ne pas concaténer les chaînes manuellement, utilisez toujours le standard join.

7
vitaly-t

Selon ce document Google intitulé "Optimisation du code JavaScript" , l'enchaînement des chaînes est plus lent que la jonction d'un tableau, mais apparemment, ce n'est pas vrai pour moteurs Javascript modernes.

J'ai fait ne référence pour l'exemple de test de Fibonacci qu'ils ont utilisé dans le document et cela montre que la concaténation (collage) de la chaîne est presque 4x aussi rapide que d'utiliser Arrayjoin.

2
Wilt

La concaténation manuelle est plus rapide, pour un tableau numérique de longueur fixe.

Voici un test JSPerf qui teste ces deux opérations :

zxy.join('/')

// versus

zxy[0] + '/' + zxy[1] + '/' + zxy[2]

// given the array

zxy = [1, 2, 3]

// resulting in the string '0/1/2'

Résultats: Utilisation de Chrome 64.0.3282.186, Array.join était 46% plus lent.

1
Matthias Dailey