WordPress: Assets nur registrieren, nicht gleich laden
Veröffentlicht: – Kommentar hinterlassen
Öfter als ich möchte sehe ich, dass Assets direkt über wp_enqueue_script oder wp_enqueue_style geladen werden, ohne vorher zu prüfen, ob sie auf der aktuellen Seite überhaupt benötigt werden. Das kann die Performance verschlechtern und Entwickler schaden.
Unterschied zwischen „register“ und „enqueue“
Um das Problem zu verstehen, schauen wir uns einmal den Unterschied zwischen dem Registrieren und dem „in die Warteschlange einreihen („enqueue“) eines Assets (Skript oder Stil) an. Wenn du ein Asset registrierst, sagst du WordPress, wie die URL zum Asset lautet und von welchen anderen Assets es abhängig ist. Wenn du ein Asset in die Warteschlange einreihst, kommt es darauf an, ob es WordPress schon bekannt ist. Falls nicht, wird es ebenfalls registriert und danach direkt auf der aktuellen Seite ausgegeben.
Das Problem mit direktem „enqueueing“
Das erste Problem ist das offensichtliche: wann immer das Asset in die Warteschlange eingereiht wurde und dementsprechend ausgegeben wird, muss es durch denjenigen, der die Seite aufruft, geladen werden. Wenn richtig definiert, lädt es nur, wenn es auch notwendig ist (was es sollte). Das bringt uns aber zum zweiten Problem.
Assets direkt in die Warteschlange einzureihen, entfernt Flexibilität. Entweder wird das Asset direkt auf der Seite ausgegeben oder es ist WordPress nicht bekannt. Insbesondere für Drittanbieter wird das zum Problem, wenn sie dein Asset an einer eigenen Stelle benötigen. Und das kann dir auch selbst passieren, wenn du es woanders benötigst.
Registrierung entkoppeln
Die Lösung ist eigentlich recht klar: Registriere deine Assets immer, aber reihe sie nur in die Warteschlange ein, wenn notwendig. Auf diesem Weg kennt WordPress das Asset immer sobald registriert, und du – oder ein Drittanbieter – kann es danach separat ausgeben, wann immer es benötigt wird.
„Entferne es einfach aus der Warteschlange“
Du magst denken, dass dieses Problem eher synthetischer Natur ist, da man jedes Asset aus der Warteschlange auch wieder daraus entfernen kann, bevor es tatsächlich ausgegeben wird. Aber da haben wir bereits das Problem. Manche Assets werden im Head, andere im Footer der Seite ausgegeben. Daher muss immer auf die Reihenfolge und Priorität geachtet werden, wann das Asset geladen wird. Es ist eine Sisyphusarbeit, ein Asset wieder aus der Warteschlange zu entfernen. Und es gibt weitere Stolpersteine, je nachdem, wie das Asset tatsächlich eingebunden ist. Und das manuelle Entfernen des Skripts/Stils aus dem Registry ($wp_scripts/$wp_styles) ist definitiv nur ein Workaround.
Neuveröffentlichungen