Paul: document.write

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

  1. 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.

    FF2:

    • 5000 mal eine Zeile document.write dauert 500 ms.
    • 5000 Zeilen in einer Variablen abgespeichert und 1 mal document.write dauert 230 ms.

    Kann das jemand bestätigen?

    Paul

    1. 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.

      1. 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);

        1. 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.

          1. Vielen Dank für die Mühe!

            Hast Du nicht die Blöcke vertauscht?

            1. 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.

              1. 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.

            2. 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ß ...

              1. 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

                1. Hallo Harlequin,
                  das läuft ja super. Vielen Dank.

                  Paul

                  1. 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?

                    1. 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.

                      1. Also klarer Vorteil für das array.

                        Wieder was gelernt (v. a. scheint es auch für alle Browser zu stimmen ;) )

    2. hi,

      Kann das jemand bestätigen?

      http://homepage.mac.com/rue/JS_Optimization_Techniques/, Absatz "Concatenate Long Strings".

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }