Question

Je dois concaténer un tas de chaînes en Javascript et je cherche le moyen le plus rapide de le faire. Supposons que le code Javascript doit créer un grand fichier " XML " qui, naturellement, se compose de nombreuses petites cordes. Alors je suis venu avec:

    var sbuffer = [];
    for (var idx=0; idx<10000; idx=idx+1) {
        sbuffer.push(‘<xmltag>Data comes here... bla... </xmltag>’);
    }
    // Now we "send" it to the browser...
    alert(sbuffer.join(”));

Ne faites pas attention à la boucle ou à l’autre "sophistiqué" code qui construit l'exemple.

Ma question est la suivante: pour un nombre inconnu de chaînes, avez-vous un algorithme / une méthode / une idée plus rapide pour concaténer de nombreuses petites chaînes en un énorme?

Était-ce utile?

La solution

Modification de la ligne:

sbuffer.push (& # 8216; Les données viennent ici ... bla ... & # 8217;);

à

sbuffer [sbuffer.length] = & # 8216; Les données viennent ici ... bla ... & # 8217 ;;

vous donnera un gain de vitesse de 5-50% (selon le navigateur, dans IE - le gain sera le plus élevé)

Cordialement.

Autres conseils

La concaténation de chaîne JavaScript de la question contient une réponse acceptée qui renvoie à un très bonne comparaison des performances de concaténation de chaînes JavaScript .

Modifier: J'aurais pensé que vous pourriez obtenir un peu plus de performances en utilisant le périphérique de Duff, comme le suggère l'article.

Je pense que vous êtes assez proche de l'optimum. YMMV, le moteur JavaScript du processus hôte (par exemple, le navigateur) gagne ou perd beaucoup de vitesse.

Je pense que le fait de placer les chaînes sur un tableau, puis de rejoindre le tableau est la technique la plus rapide pour la concaténation de chaînes en JavaScript. Certaines discussion à propos du DOM W3C et de innerHTML contiennent des preuves à l'appui. Notez la différence entre les résultats innerHTML 1 et innerHTML 2.

Autant que je sache, votre algorithme est efficace et constitue une solution performante au problème de la concaténation de chaînes.

Méfiez-vous des mauvais collecteurs de déchets IE! Qu'est-ce que vous supposez faire avec votre tableau après avoir utilisé? Peut-être que ça sera GC'd?

Vous pouvez obtenir des performances lors de la concaténation avec des jointures, puis perdre lors de la post-GC'ing. D'autre part, si vous laissez un tableau dans l'étendue tout le temps et ne le réutilisez PAS, cela peut être une bonne solution.

Personnellement, je voudrais la solution la plus simple: utiliser l'opérateur + =.

mise en mémoire tampon peut vous donner un peu plus de vitesse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top