Je vois quelques solutions de projet de code:
mais je voulais voir si il y avait une mise en œuvre régulière en javascript ?
Je vois quelques solutions de projet de code:
mais je voulais voir si il y avait une mise en œuvre régulière en javascript ?
Si vous devez écrire du code pour Internet Explorer, assurez-vous que vous choisissez une application, qui utilise le tableau joint. Concaténation de chaînes avec l' +
ou +=
de l'opérateur sont extrêmement lents sur IE. Cela est particulièrement vrai pour IE6. Sur les navigateurs modernes +=
est généralement aussi vite qu'un ensemble de jointures.
Quand je dois faire beaucoup de concaténations de chaîne j'ai l'habitude de remplir un tableau et ne pas utiliser un générateur de chaîne de classe:
var html = [];
html.push(
"<html>",
"<body>",
"bla bla bla",
"</body>",
"</html>"
);
return html.join("");
Notez que l' push
méthodes accepte plusieurs arguments.
Non, il n'y a pas de prise en charge intégrée pour la construction de chaînes de caractères, vous devez utiliser la concaténation à la place.
Vous pouvez, bien sûr, faire un tableau des différents composants de votre chaîne, puis en appel en join()
sur ce tableau, mais il dépend alors de la façon dont la jointure est mis en œuvre en JS interprète que vous utilisez.
EDIT. J'ai fait une expérience pour comparer la vitesse d' str1+str2
méthode de rapport à array.push(str1, str2).join()
méthode. Le code est simple:
var iIterations =800000;
var d1 = (new Date()).valueOf();
str1 = "";
for (var i = 0; i<iIterations; i++) str1 = str1 + Math.random().toString();
var d2 = (new Date()).valueOf();
log("Time (strings): " + (d2-d1));
var d3 = (new Date()).valueOf();
arr1 = [];
for (var i = 0; i<iIterations; i++)arr1.push(Math.random().toString());
var str2 = arr1.join("");
var d4 = (new Date()).valueOf();
log("Time (arrays): " + (d4-d3));
Je l'ai testé avec IE8 et FireFox 3.5.5, à la fois sur Windows 7 x64.
Au début, je l'ai testé sur un petit nombre d'itérations (de quelques centaines, quelques milliers d'articles). Les résultats sont imprévisibles (parfois de concaténation de chaîne a 0 millisecondes, parfois, il a fallu 16 millisecondes, le même pour tableau d'adhésion).
Quand j'ai augmenté le nombre à 50'000, les résultats ont été différents dans les différents navigateurs - à-dire la concaténation de chaîne a été plus rapide (94 millisecondes) et rejoignez a été plus lente(125 millisecondes), alors que dans Firefox, la matrice de joindre au plus vite (113 millisecondes) que la chaîne de liaison (117 millisecondes).
Puis j'ai augmenté le nombre à 500'000. Maintenant l' array.join()
a été plus lente que la concaténation de chaîne dans les deux navigateurs: string concat 937ms dans IE, 1155 ms dans Firefox, la matrice de rejoindre 1265 dans IE, 1207 dans Firefox.
Nombre d'itérations maximal j'ai pu tester sous IE sans avoir "le script est trop long à exécuter" était de 850'000. Puis IE a été 1593 pour la concaténation de chaîne et 2046 pour tableau de rejoindre, Firefox avait 2101 pour la concaténation de chaîne et 2249 pour la matrice de rejoindre.
Résultats - si le nombre d'itérations est petite, vous pouvez essayer d'utiliser l' array.join()
, comme cela pourrait être le plus rapide dans Firefox. Lorsque le nombre augmente, l' string1+string2
méthode est plus rapide.
Mise à JOUR
J'ai effectué le test sur IE6 (WindowsXP). Le processus d'arrêté de répondre immédiatement et ne s'est jamais terminée, si j'ai essayé le test sur plus de 100'000 itérations.
Sur les 40'000 itérations les résultats ont été
Time (strings): 59175 ms
Time (arrays): 220 ms
Cela signifie - si vous avez besoin de support IE6, choisissez array.join()
ce qui est beaucoup plus rapide que la concaténation de chaîne.
Pour ceux que cela intéresse, voici une alternative à l'invocation de la Matrice.joindre:
var arrayOfStrings = ['foo', 'bar'];
var result = String.concat.apply(null, arrayOfStrings);
console.log(result);
La sortie, comme prévu, est la chaîne de caractères "foobar". Dans Firefox, cette approche surpasse Tableau.rejoindre mais est dépassé par + concaténation. Depuis La Chaîne.concat exige que chaque segment soit spécifié comme argument séparé, l'appelant est limitée par aucun argument count limite imposée par l'exécution de moteur JavaScript. Jetez un oeil à la documentation de la Fonction.le prototype.appliquer() pour plus d'informations.
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.