In JavaScript habe ich eine Schleife mit vielen Iterationen, und in jeder Iteration erstelle ich eine große Zeichenfolge mit vielen +=
Operatoren. Gibt es eine effizientere Möglichkeit, eine Zeichenfolge zu erstellen? Ich habe darüber nachgedacht, ein dynamisches Array zu erstellen, in dem ich immer wieder Zeichenfolgen hinzufüge und dann einen Join mache. Kann jemand erklären und ein Beispiel geben, wie dies am schnellsten geht?
163
Antworten:
Scheint basierend auf Benchmarks bei JSPerf, dass die Verwendung
+=
die schnellste Methode ist, wenn auch nicht unbedingt in jedem Browser.Zum Erstellen von Zeichenfolgen im DOM scheint es besser zu sein, die Zeichenfolge zuerst zu verketten und dann zum DOM hinzuzufügen, anstatt sie iterativ zum Dom hinzuzufügen. Sie sollten jedoch Ihren eigenen Fall bewerten.
(Danke @zAlbee für die Korrektur)
quelle
+=
ein Array verknüpft wird oder nicht.66%
(für IE9) schneller ist als das Erstellen einer Zeichenfolge und das anschließende Hinzufügen der Zeichenfolge zum DOM.Ich habe keinen Kommentar zur Verkettung selbst, möchte aber auf den Vorschlag von @Jakub Hampl hinweisen:
ist falsch, weil es auf einem fehlerhaften Test basiert. Dieser Test wird nie an das DOM angehängt.
Dieser feste Test zeigt, dass das Erstellen der Zeichenfolge auf einmal vor dem Rendern viel, VIEL schneller ist. Es ist nicht einmal ein Wettbewerb.
(Entschuldigung, dies ist eine separate Antwort, aber ich habe noch nicht genug Vertreter, um die Antworten zu kommentieren.)
quelle
Vor drei Jahren, seit diese Frage beantwortet wurde, werde ich meine Antwort trotzdem geben :)
Tatsächlich ist die akzeptierte Antwort nicht vollständig korrekt. Jakubs Test verwendet eine fest codierte Zeichenfolge, mit der die JS-Engine die Codeausführung optimieren kann (Googles V8 ist in diesem Bereich wirklich gut!). Sobald Sie jedoch vollständig zufällige Zeichenfolgen verwenden ( hier ist JSPerf ), steht die Verkettung der Zeichenfolgen an zweiter Stelle.
quelle
Sie können String Concat auch mit Vorlagenliteralen ausführen . Ich habe die JSPerf-Tests der anderen Poster aktualisiert , um sie einzuschließen .
quelle