Autoload: misurare le opzioni caricate sempre e cambiarle
Was hier überhaupt gemessen wird
WordPress liest bei jedem einzelnen Aufruf — Startseite, Bild, REST-Ruf — alle Optionen mit gesetzter autoload-Spalte in einer einzigen Abfrage. Diese Zeilen kosten also nicht einmal Zeit, sondern immer. Welche Werte der Spalte als „wird geladen" zählen, fragt Kakapo bei WordPress selbst ab (wp_autoload_values_to_autoload, seit 6.6, samt Filter); auf älteren Installationen gilt die Liste yes, on, auto-on, auto. Gezählt wird anschließend die Länge jedes Werts in PHP, also echte Bytes. LENGTH() in SQL wäre schneller, zählt aber je nach Treiber Zeichen statt Bytes — unter SQLite stünden bei Umlauten und Emojis falsche Zahlen in der Oberfläche. Gelesen wird in Schritten von 100 Zeilen und höchstens 20.000 Zeilen je Durchgang; wird dieser Deckel erreicht, sagt es die Oberfläche und weist die Zahlen ausdrücklich als Untergrenze aus. Die Messung läuft nur beim Öffnen des Bereichs oder auf „Neu messen" — nie im Seitenaufbau eines Besuchers — und gilt danach 300 Sekunden.
Die vier Kennzahlen richtig lesen
Oben stehen vier Zahlen. „Bei jedem Aufruf geladen" nennt die Gesamtgröße, die Anzahl der Optionen und die Dauer der Messung. „Anteil an der Warnschwelle" rechnet das gegen 800.000 Bytes — exakt dieselbe Schwelle wie die Prüfung „Website-Zustand" des WordPress-Kerns, inklusive ihres Filters; zwei verschiedene Warngrenzen in einer Installation wären nur verwirrend. „Davon umstellbar" ist der Teil ohne aktiven Besitzer, also das, was du tatsächlich anfassen kannst. „Bereits umgestellt" summiert, was du hier schon aus dem Ladevorgang genommen hast. Darunter zeigt die Karte „Woher die Last kommt" dieselbe Menge nach Herkunft aufgeteilt, die zweite Karte die 25 größten Einzelposten.
Die Zuordnung ist ein Namensvergleich, kein Beweis
Die options-Tabelle hat keine Spalte „Besitzer". Kakapo vergleicht deshalb den Optionsnamen mit dem, was tatsächlich auf der Platte liegt: Verzeichnisname, Dateiname des Hauptskripts und Textdomäne jedes installierten Plugins sowie die Slugs aller Themes. Die längste passende Vorsilbe gewinnt, sonst würde „kakapowp" gegen „kakapowp_performance" gewinnen und das falsche Plugin genannt. Was ein Plugin für seine Optionen wirklich benutzt, steht in keinem Header — eine Abkürzung wie „wpseo" ist aus „Yoast SEO" nicht ableitbar. Solche Fälle landen im Eimer „keine Zuordnung", und das heißt „ich weiß es nicht", nicht „gehört niemandem". Wenn du eine Vorsilbe sicher kennst, trägst du sie über den Filter kwpp_autoload_praefixe nach; das Plugin macht das für seine eigene Vorsilbe genauso.
Was sich umstellen lässt — und warum vieles gesperrt bleibt
Der Knopf „Umstellen" erscheint nur, wenn zwei Bedingungen zugleich erfüllt sind: die Option ist mindestens 1 KB groß und sie gehört keinem aktiven Bestandteil. Gesperrt bleiben damit Optionen des WordPress-Kerns (feste Liste aus populate_options plus die Muster theme_mods_*, widget_* und *_user_roles — die werden bei jedem Aufruf wirklich gebraucht), Zwischenspeicher (Transients gehören in die Tiefenreinigung, wo sie ganz verschwinden statt nur später geladen zu werden), alles von einem aktiven Plugin oder vom aktiven Theme, und alles unter 1 KB, weil dort die zusätzliche Einzelabfrage mehr kostet als die eingesparten Bytes. Fahre mit der Maus über einen ausgegrauten Knopf: der Grund steht als Hinweis daran. Der lohnende Fall ist fast immer die inaktive oder längst deinstallierte Erweiterung, deren Zeilen einfach liegen geblieben sind. Ohne gültige Lizenz ist der Bereich im Ruhezustand — gemessen und angezeigt wird weiterhin, umgestellt nichts.
Umstellen, Protokoll, Zurücknehmen
Geschrieben wird über wp_set_option_autoload() des Kerns, nicht mit einem eigenen UPDATE: nur so werden hinterher die richtigen Zwischenspeicher geleert, sonst lieferte ein externer Objekt-Cache weiter den alten Stand. Auf Installationen ohne diese Funktion setzt Kakapo „no" und leert alloptions, notoptions und den Einzeleintrag selbst. Vor dem Schreiben wird die Zeile noch einmal frisch geprüft: existiert sie noch, steht sie überhaupt noch auf „geladen", und wie groß ist sie in diesem Augenblick — ins Protokoll soll stehen, was wirklich aus dem Ladevorgang genommen wurde. Führt die Datenbank die Änderung nicht aus, sagt die Meldung das ausdrücklich, und es wurde nichts geändert. Das Protokoll behält bis zu 200 Einträge mit altem Spaltenwert, Größe, Zeitpunkt und Benutzernamen. Zurücknehmen geht einzeln oder für alle auf einmal; zurückgeschrieben wird „geladen", weil WordPress' Zwischenwert „auto" über die Kernfunktion nicht wiederherstellbar ist — der ursprüngliche Wert bleibt im Protokoll sichtbar. Ist eine Option zwischenzeitlich ganz verschwunden, etwa weil das Plugin deinstalliert wurde, meldet Kakapo das und entfernt den gegenstandslosen Eintrag, statt „zurückgenommen" zu behaupten.