Je vois quelques solutions de projet de code .
Mais existe-t-il une implémentation régulière en JavaScript?
javascript
stringbuilder
Léora
la source
la source
Réponses:
Si vous devez écrire du code pour Internet Explorer, assurez-vous d'avoir choisi une implémentation qui utilise des jointures de tableau. La concaténation des chaînes avec l' opérateur
+
ou+=
est extrêmement lente sur IE. Cela est particulièrement vrai pour IE6. Sur les navigateurs modernes,+=
c'est généralement aussi rapide que les jointures de tableaux.Lorsque je dois faire beaucoup de concaténations de chaînes, je remplis généralement un tableau et n'utilise pas de classe de générateur de chaînes:
Notez que les
push
méthodes acceptent plusieurs arguments.la source
[foo(), "bar", "baz"].join("");
fonctionne également.push
pouvais accepter plusieurs arguments. Les choses aléatoires que vous apprenez.Je viens de revérifier les performances sur http://jsperf.com/javascript-concat-vs-join/2 . Les cas de test concaténent ou rejoignent l'alphabet 1000 fois.
Dans les navigateurs actuels (FF, Opera, IE11, Chrome), "concat" est environ 4 à 10 fois plus rapide que "join".
Dans IE8, les deux renvoient des résultats à peu près égaux.
Dans IE7, «rejoindre» est malheureusement environ 100 fois plus rapide.
la source
Non, il n'y a pas de prise en charge intégrée pour la création de chaînes. Vous devez utiliser la concaténation à la place.
Vous pouvez, bien sûr, créer un tableau de différentes parties de votre chaîne, puis appeler
join()
ce tableau, mais cela dépend alors de la façon dont la jointure est implémentée dans l'interpréteur JavaScript que vous utilisez.J'ai fait une expérience pour comparer la vitesse de la
str1+str2
méthode par rapport à laarray.push(str1, str2).join()
méthode. Le code était simple:Je l'ai testé dans Internet Explorer 8 et Firefox 3.5.5, tous deux sur un Windows 7 x64.
Au début j'ai testé sur un petit nombre d'itérations (quelques centaines, quelques milliers d'éléments). Les résultats étaient imprévisibles (parfois la concaténation de chaînes prenait 0 millisecondes, parfois 16 millisecondes, la même chose pour la jonction de tableaux).
Lorsque j'ai augmenté le nombre à 50000, les résultats étaient différents selon les navigateurs - dans Internet Explorer, la concaténation des chaînes était plus rapide (94 millisecondes) et la jointure était plus lente (125 millisecondes), tandis que dans Firefox, la jointure du tableau était plus rapide (113 millisecondes) que jonction de chaînes (117 millisecondes).
Puis j'ai augmenté le nombre à 500'000. Désormais, la concaténation de chaînes
array.join()
était plus lente que la concaténation de chaînes dans les deux navigateurs: la concaténation de chaînes était de 937 ms dans Internet Explorer, de 1155 ms dans Firefox, de la jointure de tableau 1265 dans Internet Explorer et de 1207 ms dans Firefox.Le nombre maximum d'itérations que j'ai pu tester dans Internet Explorer sans avoir "le script prend trop de temps à s'exécuter" était de 850 000. Ensuite, Internet Explorer était de 1593 pour la concaténation de chaînes et 2046 pour la jointure de tableau, et Firefox avait 2101 pour la concaténation de chaîne et 2249 pour la jointure de tableau.
Résultats - si le nombre d'itérations est petit, vous pouvez essayer de l'utiliser
array.join()
, car cela pourrait être plus rapide dans Firefox. Lorsque le nombre augmente, lastring1+string2
méthode est plus rapide.METTRE À JOUR
J'ai effectué le test sur Internet Explorer 6 (Windows XP). Le processus s'est arrêté pour répondre immédiatement et ne s'est jamais terminé, si j'essayais le test sur plus de 100 000 itérations. Sur 40000 itérations, les résultats ont été
Cela signifie que si vous devez prendre en charge Internet Explorer 6, choisissez celui
array.join()
qui est bien plus rapide que la concaténation de chaînes.la source
join()
fait partie d'ECMAScript et afaik chaque interpréteur JavaScript l'implémente. Pourquoi cela «dépendrait-il»?Ce code ressemble à l'itinéraire que vous souhaitez emprunter avec quelques modifications.
Vous voudrez changer la méthode d'ajout pour qu'elle ressemble à ceci. Je l'ai changé pour accepter le numéro 0 et pour le faire revenir
this
afin que vous puissiez enchaîner vos appendices.la source
null
,false
, des chaînes vides,undefined
ouNaN
.La version ECMAScript 6 (alias ECMAScript 2015) de JavaScript a introduit des littéraux de chaîne .
Notez que les rétro-graduations, au lieu des guillemets simples, entourent la chaîne.
la source
En C #, vous pouvez faire quelque chose comme
En JavaScript, vous pouvez faire quelque chose comme
la source
{0}
est remplacé contient{1}
.Pour les personnes intéressées, voici une alternative à l'appel de Array.join:
La sortie, comme prévu, est la chaîne 'foobar'. Dans Firefox, cette approche surpasse Array.join mais est surperformée par la concaténation +. Étant donné que String.concat nécessite que chaque segment soit spécifié comme argument distinct, l'appelant est limité par toute limite de nombre d'arguments imposée par le moteur JavaScript en cours d'exécution. Jetez un œil à la documentation de Function.prototype.apply () pour plus d'informations.
la source
J'ai défini cette fonction:
Et peut être appelé comme c #:
Résultat:
la source
Quand je me retrouve à faire beaucoup de concaténation de chaînes en JavaScript, je commence à chercher des modèles. Handlebars.js fonctionne assez bien en gardant le HTML et le JavaScript plus lisibles. http://handlebarsjs.com
la source
Que diriez-vous d'
sys.StringBuilder()
essayer l'article suivant.https://msdn.microsoft.com/en-us/library/bb310852.aspx
la source