90 votes

JavaScript concaténation de chaîne

Dans mon équipe, nous avons l'habitude de faire de concaténation de chaîne comme ceci:

var url = // some dynamically generated URL
var sb = new StringBuffer();
sb.append("<a href='").append(url).append("'>click here</a>");

Évidemment, la suite est beaucoup plus lisible:

var url = // some dynamically generated URL
var sb = "<a href='" + url + "'>click here</a>";

Mais le JS les experts affirment que l' + opérateur est moins performant qu' StringBuffer.append(). Est-ce vraiment vrai?

102voto

spoon16 Points 17694

Votre exemple n'est pas bon, qu'il est très peu probable que le rendement sera nettement différent. Dans votre exemple, la lisibilité devrait l'emporter sur les performances, car le gain de performance de l'un vs l'autre est négligeable. Les avantages d'un tableau (StringBuffer) sont uniquement visibles lorsque vous faites beaucoup d'concatentations. Même alors, votre kilométrage peut très selon votre navigateur.

Voici une analyse détaillée de la performance de que montre les performances en utilisant toutes les différentes JavaScript concaténation des méthodes à travers de nombreux navigateurs; Chaîne de la Performance d'une Analyse

join() once, concat() once, join() for, += for, concat() for

Plus:
Ajaxian >> la Chaîne de la Performance dans IE: Tableau.rejoignez vs += suite

46voto

pcorcoran Points 2350

Internet Explorer est le seul navigateur qui souffre réellement de ce dans le monde d'aujourd'hui. (Versions 5, 6 et 7 ont été chien lent. 8 ne montre pas la même dégradation.) Qui plus est, c'est à dire devient plus lent et plus lent, plus votre chaîne.

Si vous avez des longues chaînes pour concaténer puis certainement utiliser un tableau.technique de jointure. (Ou certains StringBuffer wrapper autour de cela, pour des raisons de lisibilité). Mais si vos cordes sont courtes n'est pas la peine.

37voto

Michael Haren Points 42641

Oui c'est vrai, mais vous ne devriez pas de soins. Aller avec celui qui est plus facile à lire. Si vous avez de la référence de votre application, puis se concentrer sur les goulets d'étranglement.

Je suppose que la concaténation de chaîne ne va pas être le goulot d'étranglement.

31voto

Frank Krueger Points 27508

D'accord avec Michael Haren.

Également envisager l'utilisation de tableaux et de s'inscrire, si la performance est en effet un problème.

var buffer = ["<a href='", url, "'>click here</a>"];
buffer.push("More stuff");
alert(buffer.join(""));

18voto

Rahul Points 8424

Essayez ceci:

var s = ["<a href='", url, "'>click here</a>"].join("");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X