Marinator: load Event in Bezug auf preload / prefetch

Hallo,

"Wartet" das load - Event (im Sinne von window.addEventListener("load", callback)) eigentlich auch bis Elemente aus preload und prefetch geladen sind, oder gilt eine Seite als load / geladen, sobald zum Ladezeitpunkt aktiv implementierte Inhalte bereitstehen?

Lässt dasload-Event in diesem Sinne eine individuelle Abstimmung zu (i.e. Differenzierung

"Alle derzeit aktiv auf der Seite dargestellten Elemente geladen" vs. "Alle Elemente inklusive preload / prefetch geladen"

)

(...und wenn nicht via load Event, wie ließe sich das bewerkstelligen?)

Danke, der Marinator

  1. Hallo Marinator,

    gute Frage. Einerseits steht in der Preload-Spec, dass der Browser in dem Moment, wo er ein <link ... rel="preload"> antrifft, das spezifizierte Medium holen, verarbeiten und in den Preload-Cache stellen muss. Das liest sich wie „Lass alles stehen und liegen und hole erstmal das hier“.

    Einen Satz tiefer steht, dass ein Preload das Load event des Dokuments nicht verzögern darf. Das widerspricht dem stehen und liegen lassen.

    Ich bring's nicht übereinander.

    Aber du kannst es ausprobieren. In der Spec steht, dass auch das <link> Element load und error Events wirft (im Beispiel haben sie ein Script gepreloaded).

    <link rel="preload" href="app.js" as="script"
          onload="preloadFinished()" onerror="preloadError()">
    

    (Bei mehr als einem <link> Element wird man das etwas ausgefeilter lösen müssen, bestenfalls mit einem nachgeschalteten Script, das addEventListener verwendet).

    Damit kannst Du für jedes link Element separat feststellen, ob es geladen wurde oder auf einen Error gelaufen ist. Mit Log-Ausgaben in der Console der Entwicklerwerkzeuge kannst Du auch feststellen, wie die Reihenfolge der load Events von link und window ist. Lösche zum Testen vorher den Browser-Cache und nimm ein richtig fettes Bild, damit es auch Zeit kostet, und referenziere es nicht im HTML. Denn wenn Du das tust, kommt window-load definitiv erst nach link-load.

    Bei Prefetch, tja. Vielleicht wirft selbst der ein load Event. Probier's mal aus. Wenn nicht, dürftest Du machtlos sein. Das bezieht sich auf Ressourcen, die von Folgeseiten benötigt werden könnten und nicht auf das aktuelle Dokument, insofern sollte das keine Events im aktuellen Dokument auslösen. Insbesondere sagt die Spec nicht "must fetch", sondern "should fetch", d.h. der Browser kann das nach Lust, Laune, Speicher und Gelegenheit machen und ggf. auch gar nicht. Bei einem Mobilbrowser würde es mich jedenfalls verärgern, wenn eine Seite 15MB Krimskrams prefetcht, den ich vielleicht nie brauche, und mein Mobilvolumne vergeudet. Deshalb sollte man sich auf einen Prefetch nicht verlassen.

    Rolf

    --
    sumpsi - posui - obstruxi