Javascript String-Verkettung schneller als dieses Beispiel?

7

Ich habe eine Reihe von Strings in Javascript verketten und auf dem schnellsten Weg bin auf der Suche zu tun. Nehmen wir an, dass das Javascript eine große XML- "Datei" erstellen muss, die natürlich aus vielen kleinen Strings besteht. Also kam ich auf:

%Vor%

Achten Sie nicht auf die Schleife oder den anderen "ausgeklügelten" Code, der das Beispiel aufbaut.

Meine Frage ist: Für eine unbekannte Anzahl von Strings, haben Sie eine schnellere Algorithmus / Verfahren / Idee viele kleine Strings zu einem riesigen einem verketten

    
Georgi 30.09.2008, 14:46
quelle

7 Antworten

13

Ändern der Zeile:

sbuffer.push(‘Data comes here... bla... ’);

bis

sbuffer[sbuffer.length] = ‘Data comes here... bla... ’;

gibt Ihnen 5-50% Geschwindigkeitsgewinn (abhängig vom Browser, in IE - wird die Verstärkung am höchsten sein)

Grüße.

    
Sergey Ilinsky 30.09.2008, 15:45
quelle
15

Die Frage JavaScript String-Verkettung hat eine akzeptierte Antwort, die auf eine sehr guter Vergleich von JavaScript String-Verkettung Performance

Bearbeiten: Ich hätte gedacht, dass Sie mithilfe von Duff Gerät wie der Artikel schlägt ein wenig mehr Leistung eek könnten.

    
Sam Hasler 30.09.2008 14:52
quelle
1

Ich denke, Sie sind dem Optimum ziemlich nahe. YMMV, ist eine große Geschwindigkeit in der JavaScript-Engine des Host-Prozesses (z. B. Browser) gewonnen oder verloren.

    
Tomalak 30.09.2008 14:50
quelle
1

Ich denke, dass das Schieben der Strings auf ein Array und anschließendes Verbinden mit dem Array die schnellste Technik für die String-Verkettung in JavaScript ist. Es gibt einige unterstützende Beweise in dieser Diskussion über W3C DOM vs. innerHTML . Beachten Sie den Unterschied zwischen den Ergebnissen innerHTML 1 und innerHTML 2.

    
John Topley 30.09.2008 14:53
quelle
1

Soweit ich weiß, ist Ihr Algorithmus gut und bekannt als eine performante Lösung für das String-Verkettungsproblem.

    
Barth 30.09.2008 14:55
quelle
0

Vorsicht vor dem IE-Müllsammler! Was tun Sie nach der Verwendung Ihres Arrays? Wahrscheinlich wird es GC'd bekommen?

Sie können beim Verketten mit Joins Leistung erzielen und verlieren dann nach dem GC. Auf der anderen Seite, wenn Sie ein Array die ganze Zeit in Reichweite lassen und es NICHT wiederverwenden, kann das eine gute Lösung sein.

Ich persönlich möchte die einfachste Lösung: einfach + = operator verwenden.

    
Thevs 30.09.2008 18:44
quelle
0

Sie könnten durch Pufferung etwas mehr Geschwindigkeit erhalten.

    
Andrew Hedges 01.10.2008 06:07
quelle

Tags und Links