Rozdęcie autoloadu, krótko
Autoloadowane dane to każdy wiersz w wp_options oflagowany do automatycznego ładowania — 'yes' na starszych instalacjach, a od WordPress 6.6 także 'on', 'auto' albo 'auto-on'. WordPress wciąga to wszystko do pamięci przy każdym żądaniu — frontend, admin, REST, cron — zanim poleci większość twojego kodu. Wtyczki dokładają do stosu i rzadko sprzątają, więc po ok. 800KB każde żądanie na stronie płaci za ten balast. I nie, to nie jest autoloader klas PHP — Composer i spl_autoload_register() żyją w kodzie, nie w bazie.
Ta strona dokumentuje moduł Autoloader Optimizer w WP Multitool — jak klasyfikuje każdą opcję autoload, dopasowuje ją do wtyczki i wyłącza autoload tylko tam, gdzie to udowodnialnie bezpieczne. Jeśli przyszedłeś po pełny DIY — terminologię, zdrowe progi, zapytania audytowe, ostrzeżenie WP Engine i które opcje bezpiecznie wyłączyć ręcznie — trzymam to w jednym poradniku: Rozdęcie autoloadu WordPress: audyt i naprawa autoloadowanych danych.
Poniżej jest sam moduł: sześć kategorii health-check, wykrywanie wtyczek, Learning Mode, zabezpieczenia i jakich wyników się spodziewać.
Jak działa Autoloader Optimizer
Autoloader Optimizer analizuje opcje autoload na stronie i poleca bezpieczne optymalizacje. Klasyfikuje każdą opcję, wskazuje kandydatów i daje mechanizm przywracania, gdy coś pójdzie nie tak.
- Health Check — Skanuje każdą opcję autoload i wrzuca ją do jednej z sześciu kategorii
- Wykrywanie wtyczek — Używa metadanych WordPress (TextDomain + nazwa folderu), żeby z dużą celnością dopasować opcje do wtyczek
- Learning Mode — Opcjonalny okres obserwacji śledzi, które opcje są naprawdę czytane, zanim cokolwiek zmienisz
- Optymalizacja — Robi kopię, potem wyłącza autoload na oflagowanych kandydatach. Żadnych danych się nie kasuje.
Krok 1: Health Check — sześć kategorii
Health check skanuje każdą opcję autoload w tabeli wp_options i wrzuca każdą do jednej z sześciu kategorii.
1. Bezpieczne opcje
To opcje rdzenia WordPress, których nigdy nie ruszamy. Są zestawiane z curated listą bezpiecznych opcji: metadane strony (siteurl, home, blogname), ustawienia czytania, rekordy wtyczek/motywu (active_plugins, template, stylesheet) i cache rdzenia (alloptions, notoptions). Nigdy nie są flagowane do optymalizacji.
2. Opcje aktywnych wtyczek
Każda opcja, której prefiks pasuje do aktualnie aktywnej wtyczki, zostaje w autoload jako niezbędna. Moduł bierze get_option('active_plugins') WordPress, żeby wiedzieć, co działa, i dopasowuje prefiksy opcji do tych wtyczek.
Przykład: wtyczka wordpress-seo jest aktywna. Każda opcja zaczynająca się od wordpress_seo_ albo wpseo_ jest oflagowana jako należąca do aktywnej wtyczki i chroniona.
3. Opcje nieaktywnych wtyczek (kandydaci do optymalizacji)
To opcje, których prefiks pasuje do zainstalowanej, ale wyłączonej wtyczki. Skoro wtyczka nie działa, te opcje nic nie dają i można im bezpiecznie wyłączyć flagę autoload.
Przykład: zainstalowałeś Elementor, używałeś chwilę, potem wyłączyłeś. Opcje z prefiksem elementor_ zostają w bazie i dalej ładują się przy każdym żądaniu. Autoloader Optimizer je znajduje i poleca wyłączyć im autoload.
4. Za duże opcje
Pojedyncze wartości opcji powyżej 10KB są flagowane, niezależnie od źródła i statusu. Duże serializowane tablice albo cache ładowane przy każdym żądaniu to oczywisty drenaż wydajności. Typowi sprawcy: harmonogramy cron, konfiguracje widgetów z page builderów, transjenty trzymane jako opcje i cache odpowiedzi API.
5. Wzorce rozdęcia
Niektóre prefiksy opcji to znane wskaźniki danych, które nigdy nie powinny być w autoload. Moduł trzyma curated listę tych wzorców. Działają niezależnie od tego, czy powiązana wtyczka jest aktywna — analiza najpierw szuka rozdęcia, potem dopiero statusu wtyczki.
| Wzorzec | Źródło | Dlaczego nie powinno być w autoload |
|---|---|---|
action_scheduler_* |
WooCommerce Action Scheduler | Dane kolejki zadań, niepotrzebne przy każdym żądaniu |
wc_tracks_* |
WooCommerce | Dane telemetrii i analityki |
elementor_* |
Elementor | Cache builderów i dane tymczasowe |
_jetpack_* |
Jetpack | Cache sync i dane modułów |
wpseo_* / aioseo_* |
Yoast SEO / AIOSEO | Tymczasowe i cache’owane dane wtyczek SEO |
rank_math_* |
Rank Math | Cache modułów i analityka |
6. Nierozpoznane opcje
Każda opcja, która nie pasuje do prefiksu rdzenia WordPress, aktywnej wtyczki, nieaktywnej wtyczki ani znanego wzorca rozdęcia, wpada do kategorii „Nierozpoznane”. To mogą być opcje aktywnego motywu, must-use, własnego kodu albo usuniętych wtyczek, które nie trzymały się standardowych nazw.
Autoloader Optimizer nigdy automatycznie nie optymalizuje nierozpoznanych opcji. Pokazujemy je informacyjnie, ale nie ruszamy tego, czego nie umiemy zweryfikować. Możesz je zbadać i zoptymalizować ręcznie, jeśli jesteś pewien, że to bezpieczne.
Krok 2: wykrywanie wtyczek — jak działają prefiksy
Najtrudniejsza część analizy opcji to poprawne ustalenie, która wtyczka stworzyła którą opcję. Moduł używa API get_plugins() WordPress, żeby wziąć wszystkie zainstalowane wtyczki z pełnymi metadanymi, w tym TextDomain.
Generowanie prefiksów
Dla każdej wtyczki generujemy kilka możliwych prefiksów:
- Prefiks z folderu — Nazwa folderu wtyczki z podkreśleniami (np.
advanced-cachingstaje sięadvanced_caching_) - Prefiks TextDomain — Zadeklarowany TextDomain wtyczki, jeśli różni się od nazwy folderu
To podwójne podejście ogarnia częste wzorce nazw WordPress, gdzie folder ma myślniki, a TextDomain podkreślenia, albo odwrotnie.
Przed v1.1.18: problem prefiksów
Poprzednie wersje generowały prefiksy tylko z nazw folderów i skracały je z konwencji. Na przykład Fluent Forms (folder: fluentform) mógł dostać ff_ — skrót używany przez wiele innych wtyczek. To było główne źródło fałszywych trafień, które mogły zepsuć działanie wtyczki, gdy moduł wziął opcje aktywnej wtyczki za osierocone.
Po v1.1.18: wykrywanie po TextDomain
Obecna implementacja rozwiązuje to przez:
- Odczyt pełnych metadanych wtyczki, w tym zadeklarowanego TextDomain z nagłówka
- Użycie i nazwy folderu, i TextDomain do generowania prefiksów
- Weryfikację statusu aktywności względem oficjalnej listy
active_pluginsWordPress - Klasyfikację jako „nieaktywna wtyczka” tylko wtedy, gdy jesteśmy pewni, że wtyczka naprawdę nie działa
To mocno obcina fałszywe trafienia. Teraz poprawnie widzimy, że Yoast SEO (folder: wordpress-seo, TextDomain: wordpress-seo) pasuje do wariantów wordpress_seo_, wordpress-seo_ i wpseo_ przez nagłówki wtyczki. Efekt: prawie nigdy przypadkiem nie oflagujemy opcji aktywnej wtyczki jako osieroconych.
Krok 3: Learning Mode (opcjonalna głębsza analiza)
Dla zaawansowanych, którzy chcą rekomendacji na danych, moduł daje opcjonalny Learning Mode:
- Okres śledzenia — Odpal moduł w trybie obserwacji na konfigurowalny czas (domyślnie: 7 dni)
- Wzorce dostępu — Moduł loguje, które opcje są naprawdę czytane w adminie vs na froncie
- Analiza częstotliwości — Śledzi, jak często każda opcja jest czytana
- Scoring ważony rozmiarem — Łączy częstotliwość i rozmiar opcji, żeby policzyć priorytet optymalizacji
- Rekomendacje — Opcje nigdy nieczytane i duże mają najwyższy priorytet
To szczególnie przydaje się na stronach ze złożonym, własnym setupem, gdzie chcesz być pewny przed zmianą.
Krok 4: optymalizacja
Jak przejrzysz analizę i wskażesz kandydatów, moduł aplikuje optymalizację:
- Tworzenie kopii — Pełna kopia tabeli opcji jest tworzona i zapisywana jako opcja w bazie
- Aktualizacja flagi autoload — Dla każdego wybranego kandydata kolumna
autoloadidzie z'yes'na'no' - Weryfikacja — Moduł pokazuje podsumowanie zmian
- Monitoring — Po optymalizacji sprawdzasz, czy strona nadal działa poprawnie
Opcje zostają w bazie. Po prostu nie ładują się już do pamięci przy każdym żądaniu. Gdy wtyczka o nie poprosi, WordPress wczyta je na żądanie osobnym zapytaniem. Jest mały koszt na to konkretne żądanie, ale oszczędność z nienładowania ich zawsze jest dużo większa.
Katalog kategorii
Szybki spis głównych kategorii optymalizacji:
| Kategoria | Co to znaczy | Akcja | Poziom ryzyka |
|---|---|---|---|
| Nieaktywna wtyczka | Wtyczka zainstalowana, ale wyłączona. Opcje są, ale nikt ich nie używa. | Wyłącz autoload | Bardzo niskie — wtyczka nie działa |
| Za duże | Pojedyncza wartość opcji >10KB ładowana przy każdym żądaniu | Wyłącz autoload | Niskie — opcja nadal dostępna na żądanie |
| Wzorce rozdęcia | Znane prefiksy cache/trackerów, które nie powinny być w autoload | Wyłącz autoload | Bardzo niskie — wzorce są dobrze znane |
| Nierozpoznane | Nieznane pochodzenie — motyw, usunięta wtyczka albo własny kod | Brak (tylko informacyjnie) | N/A — nie ruszamy tego, czego nie umiemy zidentyfikować |
Zabezpieczenia
Autoloader Optimizer ma kilka warstw bezpieczeństwa:
Lista bezpiecznych opcji
Curated lista opcji rdzenia WordPress, które nigdy nie są flagowane do optymalizacji. Chroni kluczową funkcjonalność WordPress niezależnie od rozmiaru i pochodzenia.
Dopasowanie wtyczek po prefiksie
Używa oficjalnych metadanych wtyczek WordPress (TextDomain, nazwa folderu), żeby ustalić, która wtyczka trzyma którą opcję. Zestawiane z oficjalną listą active_plugins, żeby uniknąć fałszywych trafień.
Konserwatywna kategoryzacja
Jeśli jest jakakolwiek wątpliwość co do pochodzenia albo bezpieczeństwa opcji, ląduje w kategorii „Nierozpoznane” zamiast iść do automatycznej optymalizacji.
Kopia przed optymalizacją
Pełny snapshot wszystkich opcji autoload jest tworzony i zapisywany w bazie, zanim cokolwiek się zmieni.
Przywracanie jednym kliknięciem
Jeśli coś pójdzie nie tak, przywracasz kopię jednym kliknięciem. Wszystkie ustawienia autoload wracają do poprzedniego stanu.
Hook filtra dla deweloperów
Deweloperzy mogą zarejestrować własne opcje, których nigdy nie wolno wyłączać z autoload. Filtr wpmultitool_autoload_candidates zmienia listę kandydatów przed optymalizacją:
add_filter('wpmultitool_autoload_candidates', function($analysis) {
// Protect specific options from being optimized
$analysis['candidates'] = array_diff($analysis['candidates'], [
'my_critical_option',
'another_important_one',
]);
return $analysis;
});
Nawet jeśli opcja pasuje do wzorca rozdęcia albo pochodzi z nieaktywnej wtyczki, filtr pozwala ją wyłączyć z optymalizacji.
Zachowanie danych
Opcje nigdy nie są kasowane. Zmienia się tylko flaga autoload. Dane zostają w pełni dostępne dla wtyczek i kodu, który o nie prosi.
Hooki dla deweloperów
wpmultitool_autoload_candidates
Filtr wpmultitool_autoload_candidates jest wołany przed optymalizacją. Dostaje pełną tablicę analizy i musi zwrócić zmodyfikowaną analizę:
add_filter('wpmultitool_autoload_candidates', function($analysis) {
// Structure of $analysis:
// 'candidates' => array of option names flagged for optimization
// 'safe' => array of protected core options
// 'active_plugins' => array of active plugin prefixes
// 'inactive_plugins'=> array of inactive plugin prefixes
// 'oversized' => array of large options
// 'bloat_patterns' => array of matched bloat options
// Example: Protect a specific option
if (in_array('my_custom_option', $analysis['candidates'])) {
$analysis['candidates'] = array_diff(
$analysis['candidates'],
['my_custom_option']
);
}
return $analysis;
});
Monitoring i diagnostyka
Po optymalizacji: co obserwować
- Czasy ładowania strony — Zmierz przed/po w Google PageSpeed albo WebPageTest
- Zapytania do bazy — Sprawdź log wolnych zapytań pod kątem nowych
- Funkcjonalność — Przetestuj krytyczne ścieżki (checkout, formularze, operacje w adminie)
- Logi błędów — Pilnuj
wp-content/debug.logpod kątem nowych ostrzeżeń albo błędów
Jeśli coś padnie
- Idź do WP Multitool → Autoloader Optimizer → Status
- Kliknij „Restore Backup”
- Wszystkie flagi autoload wracają do poprzedniego stanu
- Sprawdź, która optymalizacja zrobiła problem
- Użyj hooka filtra dla deweloperów, żeby ochronić tę konkretną opcję
- Wdróż optymalizacje ponownie bez problematycznej opcji
Pomiar rozmiaru autoloadu
-- Before optimization (check current autoloaded size)
SELECT SUM(CHAR_LENGTH(option_value)) AS autoload_bytes
FROM wp_options
WHERE autoload IN ('yes', 'on', 'auto', 'auto-on');
-- After optimization (verify the reduction)
SELECT SUM(CHAR_LENGTH(option_value)) AS autoload_bytes
FROM wp_options
WHERE autoload IN ('yes', 'on', 'auto', 'auto-on');
Wpływ na wydajność
Co się zmienia
- Lepiej — Większość żądań ładuje i parsuje mniej danych przy bootstrapie
- Lepiej — Mniejsze zużycie pamięci przy obsłudze żądania
- Odrobinę wolniej (pojedyncze żądania) — Żądania, które czytają opcje poza autoload, odpalają dodatkowe zapytanie do bazy po tę konkretną opcję
Czego nie ruszamy
- Funkcjonalność strony — opcje nadal dostępne
- Struktura bazy — nic nie jest kasowane
- Kompatybilność wtyczek — wtyczki działają normalnie
Typowe wyniki
Wyniki zależą od tego, jak rozdęta była tabela opcji na starcie. Strony z latami historii wtyczek i wyłączonymi pluginami zwykle zyskują najwięcej.
Realne oszczędności wg typu strony
| Typ strony | Oczekiwana redukcja | Wpływ dzienny (1 000 żądań/dzień) |
|---|---|---|
| Typowa (8–12 wtyczek) | 100–300KB na żądanie | 100–300MB obciążenia bazy |
| WooCommerce (15-20 plugins) | 500KB–2MB na żądanie | 500MB–2GB obciążenia bazy |
| Mocno rozdęta (30+ wtyczek) | 2–5MB+ na żądanie | 2–5GB+ obciążenia bazy |
FAQ
- Czym są autoloadowane dane w WordPress?
-
Autoloadowane dane to każdy wiersz w tabeli
wp_optionsoflagowany do automatycznego ładowania —'yes'na starszych instalacjach, a od WordPress 6.6 także'on','auto'albo'auto-on'. WordPress ładuje to wszystko do pamięci przy każdym żądaniu — frontend, admin, REST, cron — niezależnie, czy bieżąca strona tego używa. Zdrowa suma to ok. poniżej 800KB–1MB; wtyczki, które nie sprzątają po sobie, to zwykle powód, że to przekracza. To nie jest autoloader klas PHP (Composer / SPL). - Czy bezpiecznie ustawić autoload na 'no'?
-
Dla właściwych opcji tak — i to dużo bezpieczniejsze niż kasowanie. Ustawienie autoload na
'no'zostawia dane w bazie; WordPress ładuje je na żądanie zamiast przy każdym requeście, a zmianę da się w pełni cofnąć. Ryzyko to przełączenie opcji, które aktywna wtyczka czyta wcześnie (konfiguracja firewalla,rewrite_rules,cron), więc audytuj przynależność każdej, zanim ruszysz — osierocone opcje po usuniętych wtyczkach to bezpieczne wygrane. - Co znaczy ostrzeżenie WP Engine o autoloaded data?
-
User Portal WP Engine flaguje stronę, gdy łączny rozmiar opcji autoload w
wp_optionsurośnie — polecają trzymać to z grubsza poniżej 1MB, bo wszystko powyżej ładuje się przy każdym żądaniu. Ostrzeżenie jest tylko diagnostyczne: WP Engine podaje liczbę, a audyt i naprawa sprawców są twoje. Ten sam koszt jest na każdym hostingu — WP Engine jest po prostu jednym z nielicznych, które pokazują to w panelu. - Czy to zepsuje stronę?
- Nie. Autoloader Optimizer zmienia tylko flagę autoload, nigdy nie kasuje danych. Gdy wtyczka albo rdzeń WordPress poprosi o opcję, która już nie jest w autoload, WordPress i tak wczyta ją z bazy — po prostu nie przy każdym żądaniu. Dodatkowo przed optymalizacją powstaje pełna kopia i przywrócisz ją jednym kliknięciem, jeśli wydarzy się coś niespodziewanego.
- Dlaczego nierozpoznane opcje nie są optymalizowane automatycznie?
-
Bo nie umiemy zweryfikować źródła. To mogą być opcje aktywnego motywu (nietypowe prefiksy), must-use w
/wp-content/mu-plugins/, własne opcje z twojego kodu albo wtyczki z nietypowymi nazwami. Automatyczna optymalizacja nierozpoznanych ryzykowałaby zepsucie czegoś, czego nie rozumiemy do końca. Zamiast tego pokazujemy je do przeglądu. - A wtyczki z nietypowymi prefiksami?
- Od v1.1.18 bierzemy TextDomain z nagłówka wtyczki do dodatkowych prefiksów, co łapie większość nietypowych nazw. Część wtyczek ma jednak prefiksy bez związku z nazwą (np. własne skróty w starym kodzie). Wtedy chronisz je hookiem filtra dla deweloperów albo ręcznie oglądasz opcję i decydujesz sam.
- Dlaczego wtyczka i tak tworzy opcje dla funkcji, których nie używam?
- Większość wtyczek WordPress tworzy wszystkie klucze opcji przy instalacji, niezależnie od włączonych funkcji. To prostsze niż dynamiczne sprawdzanie aktywacji. Autoloader Optimizer to łagodzi, nie ładując w autoload opcji z wyłączonych wtyczek albo funkcji, których teraz nie używasz.
- Ile realnie da się zaoszczędzić?
- Zależy od ekosystemu wtyczek. Typowa strona z 8–12 wtyczkami może liczyć na 100–300KB mniej na żądanie. Strona WooCommerce z 15–20 wtyczkami bywa 500KB–2MB. Mocno rozdęta z 30+ wtyczkami i latami historii: 2–5MB+ na żądanie.
- Co, jeśli wtyczkę włączę z powrotem, a autoload jej opcji już wyłączyłem?
- Opcje nadal działają normalnie. WordPress wczyta je na żądanie, gdy wtyczka poprosi. Jeśli chcesz je z powrotem w autoload, Restore Backup cofa wszystkie zmiany, albo ręcznie włączysz autoload dla konkretnych opcji w bazie.
- Czy to rusza transjenty albo zdarzenia cron?
-
Transjenty i harmonogramy cron w
wp_optionssą kandydatami do optymalizacji, ale zwykle czyta się je tylko gdy trzeba. Moduł flaguje duże do przeglądu. Możesz je chronić hookiem filtra dla deweloperów, jeśli wolisz, żeby zostały nietknięte.
Zacznij optymalizować opcje autoload
Autoloader Optimizer WP Multitool monitoruje tabelę wp_options, znajduje rozdęte i osierocone dane autoload i pokazuje, co bezpiecznie posprzątać — z pełną kopią i przywracaniem jednym kliknięciem.