document.write
Paul
- javascript
Moin,
hab eine Frage zur Performance von document.write.
Was ist schneller, 100 mal document.write oder 100 Werte in einen String abspeichern und ein document.write?
Paul
Also ich hab jetzt mal ein bisschen rumgespielt.
IE7:
FF2:
Kann das jemand bestätigen?
Paul
Also ich hab jetzt mal ein bisschen rumgespielt.
IE7:
- 5000 mal eine Zeile document.write dauert 330 ms.
- 5000 Zeilen in einer Variablen abgespeichert und 1 mal document.write dauert 1450 ms.
Das überrascht mich doch ein wenig. An sich müßte es viel schneller sein, alles erst in einer Variablen zu sammeln, weil nicht jedes Mal die Seite neu gerendert werden muß.
Poste mal den kompletten Code, würde ich gerne selbst überprüfen.
Poste mal den kompletten Code, würde ich gerne selbst überprüfen.
gern:
var inhalt;
var jetzt1 = new Date();
jetzt1 = jetzt1.getTime();
/*if (layer.match('Grenzen')) {
for(i=0;i<5000;i++){
document.write('<div class="ueberschrift1">Grenzen</div>');
}
}*/
if (layer.match('Grenzen')) {
for(i=0;i<5000;i++){
inhalt = inhalt + '<div class="ueberschrift1">Grenzen</div>';
}
document.write(inhalt);
}
var jetzt2 = new Date();
jetzt2 = jetzt2.getTime();
alert(jetzt2-jetzt1);
Es ist so, wie Du schreibst. Auch im Opera ist die direkte Ausgabe geringfügig schneller. Hier mal ein paar Zahlen. Der erste Block sind die Messungen mit Sammlung in einer Variablen, der zweite die direkte Ausgabe.
Firefox
437
562
485
484
578
485
468
469
469
484
391
343
344
344
344
359
312
343
312
328
IE
218
234
203
234
218
203
235
219
203
219
2937
2843
2781
2734
2641
Opera
203
103
359
187
187
203
141
297
219
187
94
109
157
156
140
156
141
156
141
140
140
Es liegt die Vermutung nahe, daß im IE und Opera die Textausgabefunktion schneller als Stringfunktionen abgearbeitet wird. Da das Dokument ja noch nicht fertig gerendert ist, bevor die Ausgaben erfolgen, wird der Geschwindigkeitsnachteil der Direktausgabe vermutlich von der Langsamkeit der Stringfunktionen noch übertroffen. Du müßtest diese bzw. ähnliche Tests noch mal mit Inhalten wiederholen, die nachträglich, nachdem das Dokument schon fertig ausgegeben wurde, in das bereits ausgegebene Dokument eingefügt werden.
Vielen Dank für die Mühe!
Hast Du nicht die Blöcke vertauscht?
Vielen Dank für die Mühe!
Hast Du nicht die Blöcke vertauscht?
Was meinst Du damit? Ich habe die Bedingungen rausgenommen und jeweils die Gegenfunktion beim Test auskommentiert.
Vielen Dank für die Mühe!
Hast Du nicht die Blöcke vertauscht?
Was meinst Du damit? Ich habe die Bedingungen rausgenommen und jeweils die Gegenfunktion beim Test auskommentiert.
Jetzt sehe ich, was Du meinst. Ich führe die Tests mit dem Opera zur Sicherheit noch mal durch.
Weitere Tests hatten folgende Ergebnisse
Opera
187
203
438
468
438
375
172
171
172
172
172
484
453
172
94
125
109
110
109
125
94
110
110
110
125
125
94
Also ist auch im Opera die Sammlung in einer Variablen performanter. Was da im IE los ist, wer weiß ...
Yerf!
Also ist auch im Opera die Sammlung in einer Variablen performanter. Was da im IE los ist, wer weiß ...
Der IE ist bei der Stringverkettung extrem lahm, liegt wohl an einer schlechten Implementierung im JS-Interpreter. Bei meinen Scripten hab ich mir da immer mit einem Array und join() beholfen. (Also die einzelnen Strings per push() ins Array und zum Schluss mittels join() den fertigen String bauen, funktioniert dann ähnlich wie der StrinBuilder in C# ;-)
Gruß,
Harlequin
Hallo Harlequin,
das läuft ja super. Vielen Dank.
Paul
Hallo Harlequin,
das läuft ja super. Vielen Dank.Paul
Ist es so viel schneller? Poste mal die Meßergebnisse für den IE für diese Variante im Verglich zur direkten Ausgabe mit document.write. Ist die Variante auch im Firefox schneller als einfache Stringverknüpfung in einer Variablen?
IE:
document.write = 325
string+string = 1500
array = 50
FF:
document.write = 425
string+string = 300
array = 350
Also klarer Vorteil für das array.
Also klarer Vorteil für das array.
Wieder was gelernt (v. a. scheint es auch für alle Browser zu stimmen ;) )
hi,
Kann das jemand bestätigen?
http://homepage.mac.com/rue/JS_Optimization_Techniques/, Absatz "Concatenate Long Strings".
gruß,
wahsaga