Autoload: pomiar zawsze wczytywanych opcji i ich przełączanie
Co właściwie jest tu mierzone
WordPress przy każdym pojedynczym wywołaniu — strona główna, obraz, wywołanie REST — czyta w jednym zapytaniu wszystkie opcje z ustawioną kolumną autoload. Te wiersze kosztują więc czas nie raz, lecz zawsze. O to, które wartości kolumny liczą się jako „zostanie załadowane”, Kakapo pyta sam WordPress (wp_autoload_values_to_autoload, od 6.6, wraz z filtrem); na starszych instalacjach obowiązuje lista yes, on, auto-on, auto. Następnie liczona jest długość każdej wartości w PHP, czyli prawdziwe bajty. LENGTH() w SQL byłoby szybsze, ale w zależności od sterownika liczy znaki zamiast bajtów — pod SQLite przy znakach diakrytycznych i emoji w interfejsie stałyby błędne liczby. Odczyt następuje w krokach po 100 wierszy i najwyżej 20 000 wierszy na przebieg; jeśli ten limit zostanie osiągnięty, interfejs to mówi i wyraźnie oznacza liczby jako dolną granicę. Pomiar odbywa się tylko przy otwarciu obszaru albo po kliknięciu „Zmierz ponownie” — nigdy przy budowaniu strony dla gościa — i obowiązuje potem przez 300 sekund.
Prawidłowe odczytanie czterech wskaźników
U góry znajdują się cztery liczby. „Ładowane przy każdym wywołaniu” podaje łączny rozmiar, liczbę opcji i czas trwania pomiaru. „Udział w progu ostrzegawczym” przelicza to względem 800 000 bajtów — dokładnie ten sam próg co kontrola „Stan witryny” rdzenia WordPressa, łącznie z jej filtrem; dwie różne granice ostrzegawcze w jednej instalacji byłyby tylko mylące. „W tym do przestawienia” to część bez aktywnego właściciela, czyli to, czego faktycznie możesz dotknąć. „Już przestawione” sumuje to, co zostało tu już zabrane z procesu ładowania. Poniżej karta „Skąd bierze się obciążenie” pokazuje tę samą ilość w podziale na pochodzenie, a druga karta 25 największych pojedynczych pozycji.
Przyporządkowanie to porównanie nazw, a nie dowód
Tabela options nie ma kolumny „Właściciel”. Kakapo porównuje więc nazwę opcji z tym, co faktycznie leży na dysku: z nazwą katalogu, nazwą pliku głównego skryptu i domeną tekstową każdej zainstalowanej wtyczki oraz ze slugami wszystkich motywów. Wygrywa najdłuższy pasujący przedrostek, w przeciwnym razie „kakapowp” wygrałby z „kakapowp_performance” i wskazana zostałaby niewłaściwa wtyczka. Tego, czego wtyczka naprawdę używa dla swoich opcji, nie ma w żadnym nagłówku — skrótu takiego jak „wpseo” nie da się wyprowadzić z „Yoast SEO”. Takie przypadki trafiają do kosza „brak przypisania”, a to znaczy „nie wiem”, a nie „nie należy do nikogo”. Jeżeli znasz przedrostek na pewno, dopisujesz go przez filtr kwpp_autoload_praefixe; wtyczka robi dokładnie to samo dla własnego przedrostka.
Co da się przestawić — i dlaczego wiele pozostaje zablokowane
Przycisk „Przestaw” pojawia się tylko wtedy, gdy jednocześnie spełnione są dwa warunki: opcja ma co najmniej 1 KB i nie należy do żadnego aktywnego składnika. Zablokowane pozostają tym samym opcje rdzenia WordPressa (stała lista z populate_options plus wzorce theme_mods_*, widget_* i *_user_roles — te są przy każdym wywołaniu naprawdę potrzebne), pamięci pośrednie (transienty należą do czyszczenia głębokiego, gdzie znikają całkowicie, zamiast być tylko ładowane później), wszystko, co pochodzi od aktywnej wtyczki albo od aktywnego motywu, oraz wszystko poniżej 1 KB, ponieważ tam dodatkowe pojedyncze zapytanie kosztuje więcej niż zaoszczędzone bajty. Najedź myszą na wyszarzony przycisk: powód jest przy nim podany jako wskazówka. Opłacalny przypadek to niemal zawsze nieaktywne albo dawno odinstalowane rozszerzenie, którego wiersze po prostu zostały. Bez ważnej licencji obszar jest w stanie spoczynku — pomiar i wyświetlanie działają nadal, przestawiane nie jest nic.
Przestawianie, protokół, cofanie
Zapis odbywa się przez wp_set_option_autoload() z rdzenia, a nie własnym poleceniem UPDATE: tylko tak zostaną potem opróżnione właściwe pamięci pośrednie, w przeciwnym razie zewnętrzny cache obiektów podawałby dalej stary stan. Na instalacjach bez tej funkcji Kakapo ustawia „no” i sam czyści alloptions, notoptions oraz pojedynczy wpis. Przed zapisem wiersz jest jeszcze raz świeżo sprawdzany: czy nadal istnieje, czy w ogóle nadal stoi na „ładowane” i jak duży jest w tej chwili — w protokole ma stać to, co naprawdę zostało zabrane z procesu ładowania. Jeśli baza danych nie wykona zmiany, komunikat mówi o tym wprost i nic nie zostało zmienione. Protokół zachowuje do 200 wpisów ze starą wartością kolumny, rozmiarem, momentem i nazwą użytkownika. Cofać można pojedynczo albo dla wszystkich naraz; zapisywana z powrotem jest wartość „ładowane”, ponieważ pośredniej wartości WordPressa „auto” nie da się przywrócić funkcją rdzenia — pierwotna wartość pozostaje widoczna w protokole. Jeśli opcja w międzyczasie zniknęła całkowicie, na przykład dlatego, że wtyczka została odinstalowana, Kakapo to zgłasza i usuwa bezprzedmiotowy wpis, zamiast twierdzić, że „cofnięto”.