Maxwell: Seitenaufbau

Hallo,

folgender HTML Ausschnitt:

<body>
<script type="text/javascript" src="script1.js"></script>
<script type="text/javascript" src="script2.js"></script>
hello world
</body>

Der Seitenaufbau erfolgt wie folgt: Zuerst wird script1.js ausgeführt, danach (und wirklich danach, nicht parallel) wird script2.js geladen. Erst dann erscheint "hello world". Falls nun die Ausführung eines der javascript files (bzw. deren Generierung) sehr lange dauert, verlangsamt sich der Seitenaufbau.

Wie kann man das verhindern?

Möglichkeit 1: defer, das Script wird erst am Schluss ausgeführt. Problem: unpraktikabel, da es über document.write Output genieriert. Ein nachträgliches Einfügen über document.createElement und .appendChild ist nicht möglich :-(

Möglichkeit 2: window.setTimeout(), geht ebenfalls nicht, da der HTML-Code von document.write() dann den Seiteninhalt überschriebt.

Was nu?

Grüsse,

Maxwell

  1. Hi Maxwell!

    Wie jetzt? Klar wird erst script1 und dann script2 ausgeführt, das steht ja so da.
    Wieso generierst du javascript files (und wie - serverseitig??)?
    Verlangsamt sich der Seitenaufbau durch die Ausführung von script1 Inhalten oder weil ein document.write aus script1 umfangreichen Output generiert?
    Wird dieser (oder irgend ein anderer Output) von script2 benötigt?
    Sonst könntest du ja script2 vor script1 ausführen?

    Grüsse,
    Richard

    1. Hi,

      Verlangsamt sich der Seitenaufbau durch die Ausführung von script1 Inhalten oder weil ein document.write aus script1 umfangreichen Output generiert?

      nein, sondern die Tatsache, dass die folgende Frage vom Browser nicht beantwortet werden kann:

      Wird dieser (oder irgend ein anderer Output) von script2 benötigt?

      Der Browser *muss* warten, bis er das erste Script vollständig erhalten und abgearbeitet hat, bevor er im Seitenaufbau fortfahren kann. Das lässt sich nicht umgehen. Insbesondere wenn das Script dann tatsächlich per document.write() das Dokument erweitert, ist es auch nicht möglich, das Problem ohne anwendungsfallspezifische Konzepte (die i.d.R. im Verzicht auf document.write() bestehen) zu lösen - denn genau deswegen ist die Wartezeit unumgänglich.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hi,

        Verlangsamt sich der Seitenaufbau durch die Ausführung von script1 Inhalten oder weil ein document.write aus script1 umfangreichen Output generiert?

        nein, sondern die Tatsache, dass die folgende Frage vom Browser nicht beantwortet werden kann:

        Wird dieser (oder irgend ein anderer Output) von script2 benötigt?

        Wenn aber der _Anwender_ weiss, dass mit dem Seitenaufbau nicht auf die vollständige Ausführung von Script1 gewartet werden muss, so kann man die Ausführung von Script1 wohl asynchron laufen lassen und parallel die Seite aufbauen (siehe schon genanntes window.settimeout)...

        Klar ist hingegen, dass logischerweise kann nicht die Seite inklusive des mit document.write geschriebenen Inhalts vor der Ausführung von document.write dargestellt werden...

        Grüsse,
        Richard

        Grüsse,
        Richard

        1. Wenn aber der _Anwender_

          Ist natürlich Quatsch: es muss Seitenersteller heissen

          Grüsse,
          Richard

          1. //Möglichkeit 2: window.setTimeout(), geht ebenfalls nicht, da
            //der HTML-Code von document.write() dann den Seiteninhalt
            //überschriebt.

            Also willste erst die Seite laden und dann Hello World? Also nachdem die Seite geladen ist? Warum ist bein document.write() bei dem ersten <script> kein <script src=2.script>?
            Dann ladet er die Seite und den Script.

            1. Hi,

              Also willste erst die Seite laden und dann Hello World? Also nachdem die Seite geladen ist? Warum ist bein document.write() bei dem ersten <script> kein <script src=2.script>?

              ritschmanhard hat sich auf den hypothetischen Fall bezogen, dass kein document.write() vorkommt.

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
      2. Hi,

        Der Browser *muss* warten, bis er das erste Script vollständig erhalten und abgearbeitet hat, bevor er im Seitenaufbau fortfahren kann. Das lässt sich nicht umgehen.

        Man könnte es dem Browser mitteilen: Mach schon weiter, Du Browser Du!.
        Ob's der Browser versteht, ist was anderes - ich hab's nicht getestet.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hi Andreas

          Man könnte es dem Browser mitteilen: Mach schon weiter, Du Browser Du!.

          Das funktioniert (zumindest im Explorer), nur mit der Prämisse, dass das Script keinen Output generieren darf (und das tut es nun mal).

          Grüsse,

          Maxwell

    2. Hi Richard

      Wie jetzt? Klar wird erst script1 und dann script2 ausgeführt, das steht ja so da.

      Richtig. Ziel wäre es, dass beide quasi-parallel ausgeführt werden.

      Wieso generierst du javascript files (und wie - serverseitig??)?

      Serverseitig.

      Verlangsamt sich der Seitenaufbau durch die Ausführung von script1 Inhalten oder weil ein document.write aus script1 umfangreichen Output generiert?

      Nein, die serverseitige Ausführung dauert lange und kann nicht optimiert werden.

      Wird dieser (oder irgend ein anderer Output) von script2 benötigt?

      Nein, deshalb ist es mein Ziel, die Scripte quasi-parallel auszuführen. Der weitere Seitenaufbau soll durch die lange Runtime der Javascripts nicht beeinflusst werden.

      Grüsse und danke

      Maxwell