molily: simple Dom Abfrage geht nicht

Beitrag lesen

und die Initialisierungsfunktionen auszuführen, sobald das Dokument geladen ist.

Njein.

Das mag von einem High-Performance-Standpunkt Sinn machen. Das ist für mich eine Optimierung ist, die man einsetzen KANN, wenn man klassisches Event-Handling gut verstanden hat. Ich setze es so radikal sehr selten ein und rate zunächst zu unobtrusive DOM Scripting. Standard in der JavaScript-Entwicklung ist die Nutzung von DOM-ready-Lösungen, bei denen egal ist, an welcher Stelle man die Scripte notiert, also eine spätere Änderung und Optimierung möglich ist. Aus Sicht von wiederverwendbaren Scripten, die nicht von einer bestimmten script-Position im Dokument abhängen, macht das m.E. immer Sinn.

Die elaborierten unter den DOM-ready-Lösungen, die in den großen Bibliotheken verbaut sind, prüfen im Übrigen nicht nur den Zugriff auf das volle DOM, sondern auch den Ladezustand von Stylesheets, weil viele Scripte die gerenderten Element-Zustände benötigen. Ich weiß nicht, ob das zwingend gegeben ist, wenn das script-Element nach dem entsprechenden link@rel=stylsheet-Element auftaucht. Ich würde jedem raten, sich an die Best Practises zu halten, die gut erforscht sind sowie robust und flexibel im Einsatz sind. Das ist m.M.n. DOM-ready als Stand der Technik.

An welcher Stelle man Script platziert, hängt auch einfach davon ab, was sie tun und wie wichtig das Anwenden des DOM Scriptings im Vergleich zum schnellen Aufbau des Dokuments ist. Wenn zahlreiche Funktionen des Dokuments mit JavaScript hinzugefügt werden, dann habe ich wenig davon, wenn dicke Scripte am Ende geladen werden und ein »Flash of unscripted document« stattfindet. Üblicherweise bauen Unobtrusive-Scripte Inhalte ins DOM ein wie z.B. Links und Schaltflächen. Wenn das erst zwei Sekunden nach dem Aufbau des Dokuments passiert, habe ich keine verbesserte User-Experience. Nicht zuletzt gibt es einfach Scripte, die so früh wie möglich ausgeführt werden müssen, weil sie die Grundlagen für das darauffolgende DOM-Scripting legen (man denke etwa an document.documentElement.className = "js").

Mathias