Seite 1 von 1

Wann wird document.ready ausgeführt?

Verfasst: 13.07.2010, 08:19
von AGB
Hallo,
laut Doku wird der Event ausgeführt, wenn der Komplette DOM Baum geladen wurde. Also für mein Verständnis erst nach dem das schließende html Tag "da" ist.

Ich kann aber JavaScript schon vorher ausführen, z.B. im Head wie beim neuen Analytics Tracking snippet.

Ist das richtig?

Verfasst:
von

Verfasst: 13.07.2010, 10:10
von xlb
Olla ...

Du kannst JS grundsätzlich im "Head" und im "Body" ausführen.

Wenn gezielt (DOM-)Elemente der Seite manipuliert werden sollen, muss/sollte sichergestellt werden, dass diese bei Ausführung des entsprechenden JS auch vorhanden sind.

Verfasst: 13.07.2010, 10:26
von AGB
Es geht mir konkret um den Zeitpunkt des document.ready()
Nehmen wir an ich habe eine Ajax Funktion die Visits zählt. Wird sie bei document.ready() aufgerufen können theoretisch visits "verloren" gehen, weil die Seite lange lädt und der User schon auf die Hauptnavigation geklickt hat. Rufe ich gleich im Head auf, hat der User keine Chance vorher schon woanders zu klicken.
So weit meine Überlegung und wie ich das Analytics Ajax Tracking verstanden habe.

Das wollte ich mal von den Experten verifiziert haben.

Verfasst:
von

Verfasst: 13.07.2010, 11:20
von xlb
Wie sieht der Quellcode "deines" document.ready() aus?

Selbst gestrickte ready()-Funktionen/Events werden in der Regel getriggert, wenn das DOM (ergo das reine HTML-Markup) geladen ist. Anders, als z.B. das onload-Event, das erst eintritt, wenn zusätzlich alle Resouren komplett geladen sind.
.. weil die Seite lange lädt
Genau das soll durch .ready() kompensiert werden. Wenn selbst das zu lange dauert, hast du ein Performance-Problem.

Verfasst: 13.07.2010, 11:53
von AGB
Das sind noch Vorüberlegungen, deshalb habe ich noch keinen Code.
Wenn ich Dich richtig verstehe, triggert ready() quasi nach dem schließenden html Tag, egal ob noch andere Scripte oder Bilder geladen werden.

Kann es dann nicht trotzdem vorkommen, dass der User auf einen Menüpunkt klickt, bevor ready() ausgeführt wurde? Oder stellt der Browser das HTML erst da, wenn es komplett geladen wurde?

Sicherlich ist die Ladezeit des HTMLs nicht so dramatisch hoch, aber wenn das Script im Head mehr genauigkeit bietet, als beim document.ready() würde ich es dort einfügen. Ist halt schwierig zu testen.

Verfasst: 13.07.2010, 12:24
von DanielS
Steht ja eigentlich schon alles hier:
xlb hat geschrieben:Wenn gezielt (DOM-)Elemente der Seite manipuliert werden sollen, muss/sollte sichergestellt werden, dass diese bei Ausführung des entsprechenden JS auch vorhanden sind.
Wenn nicht, dann kannst Du Dein Skript auch in den Header packen.

Verfasst: 13.07.2010, 12:37
von xlb
... aber wenn das Script im Head mehr genauigkeit bietet, als beim document.ready() würde ich es dort einfügen.
Im Head würde es ggf. sofort ausgeführt, wenn der Browser beim Parsen des Codes dort "ankommt", ggf. also bevor das Menü überhaupt generiert wird.

Verfasst: 13.07.2010, 19:09
von ishmael
AGB hat geschrieben: Kann es dann nicht trotzdem vorkommen, dass der User auf einen Menüpunkt klickt, bevor ready() ausgeführt wurde? Oder stellt der Browser das HTML erst da, wenn es komplett geladen wurde?
Ich nehme mal an es handelt sich um jQuery. In der Doku steht:
… Everything inside it (ready()) will load as soon as the DOM is loaded and before the page contents are loaded.
Bevor das DOM nicht steht, wird im Browser auch nichts angezeigt. Also sollte es nicht möglich sein, vorher per Link die Seite zu verlassen.