Vorher
Das Stylesheet des Kontaktformulars lädt auf der Startseite, das Slider-Skript auf einer Seite ohne Slider.
Nachher
Dieselbe Datei lädt nur noch dort, wo sie wirklich gebraucht wird.
Jedes Plugin, das Sie installieren, lädt sein eigenes CSS und sein eigenes JavaScript auf jeder Seite — auch auf den Seiten, die es nie brauchen. Dieses Plugin zeigt Ihnen zuerst die vollständige Liste: Handle, Datei, Größe und wo es gesehen wurde. Danach schalten Sie einzelne Einträge ab, nach Inhaltstyp, Seiten-ID, Template, Archiv, Benutzerrolle oder Gerät. Der Testmodus ist von Haus aus an, also erreicht nichts einen Besucher, bevor Sie es freigeben. Die Architektur ist modular, und ein abgeschaltetes Modul wird beim nächsten Request nicht einmal eingelesen.
Eine WordPress-Website sammelt mit den Jahren Plugins, und jedes Plugin lädt sein Stylesheet und sein Skript auf jeder Seite — auch auf denen, die beides nie benutzen. Das Kontaktformular lädt auf der Startseite, der Slider auf der Kontaktseite, und der Page Builder auf Beiträgen, die im normalen Editor geschrieben wurden. Entschieden hat das niemand; es hat sich angesammelt, Plugin für Plugin.
Das Schwierige ist nicht die Erkenntnis, dass das schlecht ist. Das Schwierige ist zu wissen, was tatsächlich lädt. Genau dort setzt das Plugin an: Die Klasse Asset_Scanner hängt sich an wp_enqueue_scripts und übergibt der Verwaltungsoberfläche die vollständige Liste je Seite — Handle, Typ, Dateipfad, Dateigröße und die Seitenkontexte, in denen der Eintrag gesehen wurde. Der Scanner protokolliert ausschließlich Requests von jemandem, der das Plugin ohnehin verwalten darf; der Seitenaufruf eines Besuchers schreibt also nie eine Zeile.
Eine Regel ist ein Satz: Dieses Handle lädt unter diesen Bedingungen nicht. Die Bedingungen sind Inhaltstyp, Seiten-ID, Seiten-Template, Archive, die Startseite, die Besucherrolle und das Gerät. Regeln laufen von niedriger zu hoher Priorität, und die letzte zutreffende gewinnt — genau das erlaubt es, ein breites Überall-aus durch ein enges Aber-auf-Seite-42-bleiben abzumildern. Ein Handle wird nie entfernt, solange etwas in der Warteschlange davon abhängt, und es wird nur aus der Warteschlange genommen und nicht deregistriert, damit ein späteres Enqueue desselben Handles nicht stillschweigend scheitert.
Der Testmodus ist standardmäßig an. Solange er läuft, gelten Regeln nur für angemeldete Administratorinnen und Administratoren, und ein Besucher sieht die Website genau wie vorher. Sie dürfen also so radikal vorgehen, wie Sie möchten, und die wichtigen Seiten prüfen, bevor irgendetwas jemand anderen erreicht. Den Testmodus wieder einzuschalten ist außerdem der schnellste Rückweg, falls eine Seite doch falsch aussieht.
Alles ist ein Modul, und ein abgeschaltetes Modul wird nicht bloß versteckt: Die Registry speichert Klassennamen statt Instanzen, Module_Manager::is_active() antwortet zuerst aus der gespeicherten Option, und die Datei wird nie eingelesen. tests/unit/isolation-test.php prüft das mit einem Modul, das seine eigenen Konstruktoraufrufe zählt, damit die Aussage nicht unbemerkt aufhören kann zu stimmen. Das Admin-CSS ist mit Tailwind unter dem Präfix hdmac- kompiliert, auf .hd-mac begrenzt und mit abgeschaltetem Preflight, sodass nichts davon in den Rest Ihres Dashboards gelangt.
Vorher
Das Stylesheet des Kontaktformulars lädt auf der Startseite, das Slider-Skript auf einer Seite ohne Slider.
Nachher
Dieselbe Datei lädt nur noch dort, wo sie wirklich gebraucht wird.
Vorher
Sie wissen, dass die Website schwer ist. Sie wissen nicht, welches Handle dafür verantwortlich ist.
Nachher
Eine vollständige Liste mit Handle, Datei, Größe und den Seitenkontexten, in denen sie gesehen wurde.
Vorher
Ein Skript zu entfernen heißt, die functions.php anzufassen und zu hoffen, dass nichts anderes bricht.
Nachher
Sie schreiben die Regel, prüfen sie mit eingeschaltetem Testmodus und geben sie dann für alle frei.
Installieren Sie die ZIP über Plugins → Installieren → Plugin hochladen. Zwei Tabellen werden angelegt, und der bedingte Asset-Loader ist bereits eingeschaltet.
Öffnen Sie angemeldet die Startseite, einen Beitrag, eine Seite und die Kontaktseite. Drücken Sie danach im Reiter Assets auf Aktualisieren, und die Liste füllt sich.
Klicken Sie neben einer Zeile, die eine Seite sicher nicht braucht, auf Regel schreiben, wählen Sie die Bedingung und speichern Sie. Der Testmodus ist noch an, den Unterschied sehen also vorerst nur Sie.
WordPress-Websites, die über die Jahre schwer geworden sind · Webdesignerinnen und Agenturen · WooCommerce-Shops · Websites mit Elementor oder Divi · Nachrichten- und Magazinseiten · Teams, die ein Dashboard an Kundinnen übergeben · alle, die sehen möchten, was eingeschaltet ist, bevor sie etwas abschalten.
Drei kostenlose Module und zwei Pro-Module, jedes hinter einem eigenen Schalter. Was Sie nicht einschalten, läuft auch nicht.
Die Registry speichert Klassennamen statt Instanzen, und die Aktiv-Prüfung liest zuerst die gespeicherte Option; die Datei eines abgeschalteten Moduls wird also nie eingelesen. tests/unit/isolation-test.php zählt die Konstruktoraufrufe und hält die Aussage damit ehrlich.
Jedes Stylesheet und jedes Skript, das Ihre Website in die Warteschlange stellt, mit Handle, Typ, Datei, Dateigröße und den Seitenkontexten, in denen es gesehen wurde. Erfasst nur aus Ihren eigenen angemeldeten Besuchen.
Inhaltstyp, Seiten-ID, Seiten-Template, Archive, Startseite, Besucherrolle oder Gerät. Regeln laufen nach Priorität, und die letzte Übereinstimmung gewinnt, sodass eine enge Ausnahme eine breite Regel aushebeln kann.
Regeln gelten nur für angemeldete Administratorinnen und Administratoren, bis Sie ihn ausschalten. Nichts, was Sie ausprobieren, erreicht einen Besucher, bevor Sie die wichtigen Seiten angesehen haben.
Ein Handle wird nie aus der Warteschlange genommen, solange etwas darin davon abhängt, und es wird nur dequeued statt deregistriert, damit ein späteres Enqueue desselben Handles nicht stillschweigend scheitert.
Standardschriften, Icon-Sets, Dialog-Skripte, die Google Fonts von Divi, Emoji, wp-embed, jQuery Migrate und Generator-Tags — jedes hinter einem eigenen Schalter statt hinter einem groben Sammelschalter.
Elementor schreibt pro Seite eine CSS-Zeile in wp_postmeta und lässt sie dort liegen. Die Anzahl wird angezeigt, bevor Sie etwas löschen, und Elementor baut beim nächsten Aufruf neu auf, was es noch braucht.
Verlegen Sie wp-login.php auf eine Adresse Ihrer Wahl; wer die alte aufruft, landet auf der Startseite. Eine Konstante in der wp-config stellt sie wieder her, falls Sie sich aussperren.
Sie entscheiden, welche Hauptmenüs jede Rolle sieht, und benennen die verbleibenden um. Das eigene Menü des Plugins wird nie ausgeblendet, weil sonst kein Rückweg bliebe.
Ihr Logo auf dem Login-Bildschirm, Ihr Name in der Admin-Fußzeile, kein WordPress-Logo in der Toolbar und keine Generator-Tags im Quelltext.
Laden Sie den Google Tag Manager, ein Chat-Widget oder ein beliebiges Drittanbieter-Tag nur auf den Seiten, die es brauchen, und erst nach der ersten Interaktion der Besucherin — oder nach acht Sekunden, damit die Statistik ehrlich bleibt.
Tailwind mit dem Präfix hdmac- kompiliert, auf .hd-mac begrenzt, Preflight abgeschaltet. Nichts, was dieses Plugin kompiliert, erreicht ein WordPress-Element außerhalb seiner eigenen Seiten.
Siebzehn Filter und sieben Actions, jeweils mit lauffähigem Beispiel in docs/hooks.md — einschließlich der Registrierung eines eigenen Moduls und einer Bedingung, die die Regel-Engine noch nicht kennt.
| Funktion | Beschreibung | Enthalten |
|---|---|---|
| Asset-Scan je Seite | Handle, Typ, Dateipfad, Größe und der Seitenkontext, in dem es gesehen wurde | |
| Regel nach Inhaltstyp | Für jeden auf der Website registrierten Post Type | |
| Regel nach Seiten-ID | Eine bestimmte Seite oder ein bestimmter Beitrag | |
| Regel nach Seiten-Template | Einschließlich 404-Seite und Suchergebnissen | |
| Regel auf Archiven | Kategorie-, Schlagwort- und Post-Type-Archive | |
| Regel auf der Startseite | Für Stylesheets, die nur die Landingpage braucht | |
| Regel nach Benutzerrolle | Ein Skript, das nur für angemeldete Personen Sinn ergibt | |
| Regel nach Gerät | Desktop oder mobil | |
| Priorität und Auswertungsreihenfolge | Die letzte zutreffende Regel gewinnt | |
| Nur dequeue, nie deregister | Damit ein späteres Enqueue desselben Handles nicht stillschweigend scheitert | |
| Abhängigkeitsschutz | Was in der Warteschlange noch gebraucht wird, wird nicht entfernt | |
| Testmodus | Regeln gelten nur für angemeldete Administratorinnen und Administratoren | |
| Scannen nur für Administratoren | Der Seitenaufruf eines Besuchers schreibt nie eine Zeile in die Datenbank | |
| Gecachtes Regelwerk | Einmal pro Request aus einem Transient gelesen, nicht aus der Datenbank | |
| Aufbewahrung des Beobachtungsprotokolls | Standardmäßig dreißig Tage, per Filter änderbar | |
| Emoji und wp-embed entfernen | Jeweils hinter einem eigenen Schalter | |
| jQuery Migrate entfernen | Für eine Website ohne Alt-Plugins | |
| Elementor-Schriften, -Icons und -Dialoge | Drei getrennte Schalter statt eines groben | |
| Google Fonts von Divi | Ohne eine Theme-Datei anzufassen | |
| Generator-Tags entfernen | WordPress- und Page-Builder-Version aus dem Quelltext | |
| Generiertes CSS zählen und aufräumen | Die Zahl der wp_postmeta-Zeilen wird vor dem Löschen angezeigt | |
| Eigene Login-Adresse | Mit Rückweg über eine Konstante in der wp-config.php | |
| Admin-Menüs je Rolle | Ausblenden und Umbenennen, je Rolle konfiguriert | |
| White Label | Logo im Login, Admin-Fußzeile und kein WordPress-Logo in der Toolbar | |
| Bedingter Script Runner | Nach der ersten Interaktion der Besucherin, spätestens nach acht Sekunden | |
| Multisite | Unterstützt, auch für Sites, die nach der Aktivierung ins Netzwerk kommen | |
| Vollständige persische Übersetzung und RTL-Panel | Mit einem eigenen Rechts-nach-links-Stylesheet für die Admin-Seiten | |
| Daten werden nur auf ausdrücklichen Wunsch entfernt | Die Option zum Löschen beim Deinstallieren ist standardmäßig aus |
| Punkt | Minimum |
|---|---|
| WordPress | 6.2 oder neuer (getestet bis 6.8) |
| PHP | 8.0 bis 8.3 |
| Theme | Jedes Theme; das Plugin lädt CSS nur auf seinen eigenen Admin-Seiten |
| Multisite | Unterstützt, auch für Sites, die nach der Aktivierung ins Netzwerk kommen |
| Page Builder | Elementor oder Divi nur, wenn Sie das Optimierer-Modul möchten; dem Rest des Plugins ist der Builder gleichgültig |
Für eine Website, die seit einigen Jahren läuft und Plugins gesammelt hat. Wenn Sie die Website letzte Woche mit zwei Plugins gebaut haben, können Sie alles Geladene ohnehin aufzählen und brauchen das hier nicht. Das Plugin verdient seinen Platz dort, wo niemand im Team mit Sicherheit sagen kann, welches Handle für das Gewicht verantwortlich ist, und wo diese Antwort gefunden werden muss, bevor etwas abgeschaltet wird. Am meisten haben Agenturen davon, weil sich dieselbe Untersuchung auf jeder übernommenen Website wiederholt.
Grundsätzlich ja, und genau dafür gibt es die Sicherungen. Der Testmodus ist standardmäßig an und wendet Ihre Regeln nur auf angemeldete Administratorinnen und Administratoren an, Sie sehen die Wirkung also vor jedem Besucher. Der Loader entfernt kein Handle, solange etwas in der Warteschlange davon abhängt, und er nimmt es nur aus der Warteschlange statt es zu deregistrieren, damit ein späteres Enqueue nicht stillschweigend scheitert. Sieht eine Seite trotzdem falsch aus, stellt das erneute Einschalten des Testmodus sofort alles wieder her, und Sie löschen danach die letzte Regel.
Dafür gibt es keine ehrliche Zahl, denn das hängt vollständig davon ab, was Ihre Website heute lädt und wie viel davon eine bestimmte Seite wirklich braucht. Das Plugin zeigt Ihnen die Dateigröße neben jedem Handle und lässt Sie einzelne entfernen, damit Sie vorher und nachher selbst messen können, mit dem Werkzeug, dem Sie ohnehin vertrauen. Wer Ihnen einen Prozentwert nennt, ohne Ihre Website gesehen zu haben, rät.
Ja. Regeln werden beim Erzeugen der Seite ausgewertet, das gecachte HTML ist also bereits die abgespeckte Fassung. Ein Vorbehalt gilt für jedes Caching-Plugin und nicht nur für dieses: Wenn Ihr Cache keine getrennte Variante je Gerät vorhält, verwenden Sie die Bedingung Gerät nicht, weil sonst die Variante der ersten Besucherin an alle ausgeliefert wird.
Ein ZIP mit allen Modulen: bedingtes Laden von Assets mit vollem Monitor, Regel-Builder und Testmodus, der Elementor- und Divi-Optimierer, die Dashboard-Anpassung, White Labelling und der bedingte Script Runner. Nichts wird separat heruntergeladen, und kein Modul steckt hinter einer Prüfung — jedes hat seinen eigenen Schalter im Tab Module.
Tragen Sie define( 'HD_MAC_DISABLE_LOGIN_SLUG', true ); in die wp-config.php ein, dann funktioniert die ursprüngliche wp-login.php wieder. Eine angemeldete Administratorin erreicht wp-login.php außerdem jederzeit direkt, das ist der zweite Rückweg. Die gute Gewohnheit ist, die neue Adresse in einem zweiten Browser zu testen, bevor Sie den schließen, in dem Sie angemeldet sind.
Der Optimierer adressiert beide namentlich, und Builder benennen ihre Handles zwischen Releases um. Statt auf ein Plugin-Update zu warten, ist die Liste der Handles hinter jedem Schalter über hd_mac_builder_handles filterbar; ein umbenanntes Handle ist damit in wenigen Zeilen ergänzt. Der bedingte Loader ist davon ohnehin unberührt, weil er von dem ausgeht, was Ihre Website tatsächlich in die Warteschlange gestellt hat.
Ja, beides. Der Filter hd_mac_match_context bringt der Regel-Engine eine Bedingung bei, die sie nicht kennt — etwa eine Prüfung auf is_woocommerce() — und sie funktioniert danach überall dort, wo auch eine eingebaute funktioniert. Der Filter hd_mac_register_modules registriert eine Klasse als Modul, das dann mit eigenem Schalter und eigenen Einstellungen im Reiter Module erscheint. docs/hooks.md enthält für beides ein vollständiges Beispiel.
Nichts, sofern Sie es nicht anders wünschen. Die Option, beim Entfernen des Plugins alles zu löschen, ist standardmäßig aus; Löschen und erneutes Installieren behält Ihre Regeln. Schalten Sie sie ein, entfernt die Deinstallation die beiden Options-Schlüssel, die beiden Tabellen, die geplanten Aufgaben und die Transients — eine kurze Liste, und das mit Absicht.
Fehlerbehebung im Plugin, Hilfe bei Installation und Einrichtung sowie Antworten auf Anwendungsfragen. Die Entscheidung, auf welche Handles Ihre konkrete Website verzichten kann, treffen Sie selbst, das ist keine Support-Anfrage — das Panel existiert, damit diese Entscheidung auf Belegen beruht. Anpassungen, neue Funktionen und Probleme, die von anderen Plugins oder Themes verursacht werden, werden separat vereinbart.