Dlaczego kokpit admina WordPress jest wolny
Jeśli admin WordPress jest wolny — albo kokpit WordPress jest bardzo wolny, a frontend szybki — nie urojenie. Wolny panel admina WordPress to jedna z najczęstszych skarg właścicieli stron po optymalizacji witryny publicznej. Wtyczki cache omijają wp-admin. CDN nie rusza panelu admina. Każde kliknięcie w backendzie WordPress odpala świeże żądanie PHP, ładuje hooki admina każdej aktywnej wtyczki i wciąga pełny zestaw autoloadowanych danych z wp_options.
Frontend ładuje się w 1,2 sekundy. Kokpit admina bierze 6+ sekund. Podnosisz hosting. Pomaga na tydzień. Potem znowu wolno.
Wtyczki cache tu nie pomagają — celowo omijają strony admina. CDN nie pomaga — admin jest dynamiczny. Spowolnienie idzie z wewnątrz WordPressa.
Dobra rada, która i tak nie znajduje problemu
- „Zaktualizuj wersję PHP”
- „Przejdź na lepszy hosting”
- „Zainstaluj wtyczkę cache”
- „Wyłącz wtyczki, których nie używasz”
- „Podnieś limit pamięci”
- Callback admin_init jednej wtyczki bierze 800 ms
- Heartbeat API odpala się nawet co 15 sekund w edytorze wpisu
- Admin-ajax.php obsługuje wiele zakolejkowanych żądań na załadowanie strony
- 2MB autoloadowanych danych przy każdym żądaniu
- Wolne zapytanie leci na każdej stronie admina
Wszystkie pięć są OK. Aktualizacja PHP i object cache warto zrobić i tak. Ale to zgadywanie — żadne nie powie, która funkcja zjada te 4 sekundy. Nie musisz „wyłączać wtyczek”, musisz wiedzieć która wtyczka, który hook i która funkcja.
Admin WordPress wolny, frontend szybki? Dopasuj objaw
„Admin WordPress bardzo wolny” to nie jeden problem — to pięć–sześć różnych, które z kokpitu czują się tak samo. Znajdź swój konkretny objaw poniżej: kolumna przyczyny mówi, który mechanizm winić, a następny krok — co z tym zrobić.
| Objaw | Najpewniejsza przyczyna | Następny krok |
|---|---|---|
| Kokpit bierze 6s+, a strona publiczna ładuje się szybko | Page cache i CDN omijają wp-admin całkowicie — czujesz surowy czas PHP z callbacków admin_init każdej wtyczki |
Najpierw przeskanuj przez Site Doctor, żeby zobaczyć, czy konfig albo baza już jest odpowiedzią, potem profiluj admin_init przez Slow Callback Finder i uszereguj callbacki po czasie wykonania |
| Każda strona admina wisi sekundę, zanim cokolwiek się wyrenderuje | Za duże dane autoload — pełny zestaw autoload wp_options ładuje się, zanim WordPress cokolwiek wyrenderuje |
Zaudytuj rozmiar autoloadu wp_options (cel poniżej 800 KB), potem wyłącz autoload na największych sprawcach |
| wp-admin zamarza tylko przy zapisie wpisu albo strony | Wolne callbacki save_post nakładają się na autosave i ruch Heartbeat post-lock w tym samym żądaniu |
Zwolnij Heartbeat do 120 s, potem zmierz callbacki save_post, żeby znaleźć wtyczkę ciężko pracującą przy zapisie |
| Admin zwalnia z każdą dodaną wtyczką | Skumulowany koszt admin_init / admin_menu — hooki admina każdej wtyczki lecą na każdej stronie admina, nie tylko na jej ustawieniach |
Uszereguj wszystkie callbacki hooków po czasie zamiast wyłączać wtyczki po jednej — zwykle dominują jedna–dwie |
| Edytor wpisu (Gutenberg) tnie przy pisaniu | Wolne odpowiedzi REST API (/wp-json/) plus ruch autosave Heartbeat — każde to pełny bootstrap WordPress |
Patrz w DevTools Network na wolne żądania /wp-json/; zwolnij Heartbeat w edytorze do 120 s |
| Strona jest wolna tylko dla zalogowanych, łącznie z frontendem | Żądania zalogowanych omijają page cache, więc ten sam koszt autoloadu i hooków bije w każdą stronę, plus własne zapytania paska admina | Włącz object cache, potem profiluj żądanie zalogowanego tak samo jak wp-admin |
| Losowe 502 w wp-admin na hostingu zarządzanym | Autoloadowane dane powyżej ~1 MB — na hostingach na memcached jak WP Engine limit na klucz to 1 MB, więc blob autoloadu cicho nie wchodzi do cache i baza dostaje młotkiem | Odpal zapytanie o rozmiar autoloadu, zejdź poniżej 800 KB z Autoloader Optimizer |
| Admin wolny tuż po aktualizacji wtyczki albo rdzenia | Sprawdzanie aktualizacji i phone-home licencji na admin_init — zewnętrzne żądania HTTP blokują stronę, aż padną na timeout |
Zmierz callbacki admin_init i szukaj tych, które robią wychodzące HTTP; efekt zwykle mija, gdy transjenty się uzupełnią |
| Admin rano w porządku, po południu pełznie | współbieżność admin-ajax — Heartbeat z każdej otwartej karty admina nasyca workery PHP, gdy zespół się loguje | Policz żądania admin-ajax.php przez 60 sekund w DevTools; zwolnij Heartbeat do 120 s i zamykaj bezczynne karty admina |
Krok 0: Zeskanuj całą stronę, zanim cokolwiek zmierzysz
Wszystko poniżej tej sekcji mierzy jedną rzecz na raz. Zanim spędzisz 15 minut robiąc to ręcznie, poświęć minutę na Site Doctor w WP Multitool: odpala cały zestaw checków w jednym przebiegu — OPcache, drop-in object-cache, zdrowie Redis, probe page cache, nakładki optymalizatorów, balast bazy — i rankuje znaleziska od najgorszego, każde zlinkowane do modułu, który to naprawia.
Nie masz jeszcze wtyczki? darmowa strona /scan/ mierzy TTFB i kompresję z zewnątrz, co mówi ci, czy serwer jest wolny, zanim przeglądarka dostanie pierwszy bajt. Nie odpala żadnego z powyższych checków — one muszą lecieć na serwerze — więc gdy masz zewnętrzną liczbę, zainstaluj WP Multitool i odpal skan. Site Doctor jest w Lite i w Pro; źródła autoload i złapanych wolnych zapytań, które czyta, są tylko w Pro, a skan Lite oznacza te dwa jako pominięte źródła zamiast pozwalać krótkiej liście wyglądać na czystą stronę.
Kiedy Multitool to zła pierwsza odpowiedź: jeśli debugujesz jedno konkretne żądanie i już wiesz które, otwórz je w Query Monitor; jeśli zadaniem jest przyspieszenie publicznego frontendu dla wylogowanych, to wtyczka page-cache, nie skan diagnostyczny.
Skan daje ci shortlistę. Głębia per żądanie i per callback dalej przychodzi z Query Monitor i Slow Callback Finder niżej na tej stronie — rankowana lista tylko mówi, które z nich warto otworzyć. Pełna lista checków, checklista Redis i użycie WP-CLI są w dokumentacji Site Doctor; jeśli wolisz zrobić to ręcznie, 15-minutowa checklista poniżej robi tę samą robotę z DevTools i SQL.
Przyspiesz wp-admin: checklista 15 minut
Bez teorii — mechanizmy są w reszcie poradnika, a każdy krok linkuje do sekcji, która to ogarnia. Potrzebujesz DevTools, dostępu do bazy i 15 minut. Każdy krok kończy się progiem pass/fail, więc wiesz, kiedy przestać.
-
Minuty 0–2: licz ticki Heartbeat, nie surowy admin-ajax — Otwórz DevTools, karta Network, filtr „admin-ajax”. Siedź na dowolnej stronie admina 60 sekund i w payloadzie każdego żądania szukaj
action=heartbeat— tylko te to Heartbeat. Więcej niż ok. 1 tick Heartbeat na minutę poza edytorem wpisu to podwyższenie (edytor legalnie tyka szybciej) — zrób krok 2. Jeśli łączny admin-ajax jest wysoki, a ticków Heartbeat mało, Heartbeat nie jest problemem — ten ruch to polling wtyczek, powiadomienia admina, autosave albo kilka otwartych kart. Skocz do kroku 3. -
Minuty 2–4: zwolnij Heartbeat do 120 sekund — Dodaj filtr
heartbeat_settingsz przyczyna nr 2 poniżej. Ponów 60-sekundowe liczenie żądańaction=heartbeat. Pass: ticki spadają do mniej więcej jednego co 2 minuty. -
Minuty 4–6: zmierz kokpit względem zwykłego ekranu admina — Załaduj
/wp-admin/, potem Ustawienia → Ogólne. Porównaj czasy ładowania dokumentu w karcie Network. Kokpit 2+ sekundy wolniejszy niż Ustawienia znaczy robotę widgetów — zobacz sekcja kokpitu. Oba tak samo wolne: przyczyna jest globalna, jedź dalej. -
Minuty 6–9: zmierz rozmiar autoloadu — Odpal SQL z sekcja autoloadu w phpMyAdmin albo
wp db query. Fail: więcej niż 800 KB łącznie autoloadowanych danych. Napraw największych sprawców przed wszystkim innym — ten koszt bije w każde żądanie. - Minuty 9–12: test object cache on/off — Jeśli hosting daje Redis albo Memcached, przełącz i załaduj tę samą stronę admina 3 razy w każdą stronę. Odrzuć pierwsze ładowanie po każdym przełączeniu — zimny cache robi ten pomiar bez sensu — i porównaj ciepłe mediany. Sekunda albo więcej szybciej z włączonym cache znaczy, że powtarzane lookupy DB były realnym kosztem — zostaw włączone. Bez zmiany: wąskie gardło raczej nie jest cache’owalnym odczytem bazy — WordPress cache’uje tylko to, co kod faktycznie wrzuca do object cache — więc idź do kroku 6 i sprawdzeń wychodzącego HTTP w tabela mechanizmów wtyczek.
-
Minuty 12–15: uszereguj callbacki admin_init — Zmierz, co leci na
admin_init, Slow Callback Finder WP Multitool albo owijając podejrzanych wmicrotime()(zobacz Jak diagnozować). Każdy pojedynczy callback powyżej 200 ms to twój cel — napraw, wymień albo zgłoś tę wtyczkę.
Dlaczego kokpit WordPress jest wolny? (kokpit kontra reszta wp-admin)
„Wolny kokpit” i „wolny wp-admin” używa się zamiennie. To dwa różne problemy. Ekran główny kokpitu (/wp-admin/index.php) robi robotę, której nie robi żaden inny ekran admina — więc zanim cokolwiek naprawisz, ustal, który masz.
- Każdy widget kokpitu odpala własne zapytania przy ładowaniu
- Widget Wydarzenia & aktualności pobiera zdalny feed WordPress.org
- Widgety wtyczek wołają API vendora, żeby wyrenderować pudełko ze statystykami
- „W skrócie” liczy wiersze w dużych tabelach wpisów i komentarzy
- Autoloadowane dane wp_options ładują się przy każdym żądaniu
- Callbacki admin_init lecą na każdym ekranie, nie tylko na swoim
- Sprawdzenia phone-home licencji blokują stronę na wychodzącym HTTP
- Ruch Heartbeat i admin-ajax nasyca workery PHP
Test trwa minutę. Załaduj /wp-admin/, potem Ustawienia → Ogólne i porównaj czasy ładowania dokumentu w DevTools. Jeśli kokpit jest 2+ sekundy wolniejszy, to widgety — usuń te, których nie sprawdzasz codziennie, snippetem wp_dashboard_setup w sekcja szybkich wygranych. Widgety z zewnętrznym HTTP to najgorsi sprawcy: strona czeka na cudzy serwer.
Jeśli oba ekrany są tak samo wolne, kokpit nie jest problemem — cały wp-admin jest. To rozmiar autoloadu i callbacki admin_init, opisane w przyczyny poniżej. Naprawa widgetów kokpitu najpierw nic ci nie da na pozostałych 40 ekranach, których używasz cały dzień.
4 prawdziwe przyczyny wolnego admina WordPress
1. Wąskie gardło admin-ajax.php
WordPress puszcza wszystkie żądania AJAX przez jeden plik: admin-ajax.php. Każde żądanie bootstrappuje cały stos WordPress. Jeśli 5 wtyczek robi AJAX na kokpicie, to 5 dodatkowych pełnych bootstrapów WordPress na widok kokpitu.
# Check admin-ajax traffic in your browser:
# DevTools → Network → Filter "admin-ajax"
# Look at how many requests fire on a single page load
2. Narzut Heartbeat API
WordPress Heartbeat wysyła żądanie AJAX co 15–60 sekund po autosave, blokady wpisów i powiadomienia. Każde ładuje pełny stos WordPress. Na hostingu współdzielonym samo to potrafi nasycić workery PHP.
// Slow down heartbeat to reduce load:
add_filter('heartbeat_settings', function($settings) {
$settings['interval'] = 120; // seconds (default: 15-60)
return $settings;
});
3. Wolne callbacki wtyczek na admin_init
Wtyczki wpinają się w admin_init, admin_menu i admin_enqueue_scripts. Lecą na każdej stronie admina, nie tylko na ustawieniach wtyczki. Jeden źle napisany callback potrafi dodać 500 ms+ do każdego żądania admina.
4. Rozdęcie autoloadu
To samo zapytanie autoload wp_options, które bije we frontend, leci też na każdej stronie admina. Ale strony admina nigdy nie są w cache, więc czujesz pełny koszt za każdym razem. Czytaj pełny poradnik autoloadu.
Wtyczki, które często spowalniają admina WordPress
Nie dam ci listy nazwisk — wersje wtyczek się zmieniają i autorzy naprawiają, więc lista nazw jest nieświeża w dniu publikacji. Mechanizmy się nie zmieniają. Te pięć klas robi większość wolnych paneli admina, które widuję, jakkolwiek wtyczka się w tym roku nazywa.
| Mechanizm | Co robi | Jak to złapać | Co robić |
|---|---|---|---|
| Phone-home licencji na admin_init | Woła serwer vendora na każdej stronie admina, żeby zwalidować klucz, i blokuje stronę, aż żądanie wróci albo padnie na timeout | Panel HTTP API Query Monitor pokazuje to samo wychodzące żądanie na każdym ekranie; admin jest najgorszy, gdy API vendora jest wolne | Zmierz callback, żeby potwierdzić, potem zgłoś autorowi — poprawka to cache sprawdzenia w transjencie, a to może wypuścić tylko on |
| Zdalne widgety changelogu / newsa | Pobiera feed RSS albo JSON od vendora, żeby wyrenderować widget kokpitu | Ekran główny kokpitu jest wolny, reszta wp-admin w porządku (zobacz test kokpitu) | Usuń widget przez remove_meta_box() — snippet jest w szybkie wygrane |
| Skany bezpieczeństwa przy ładowaniu admina | Chodzi po systemie plików albo sprawdza hashe w admin_init zamiast według harmonogramu |
Każdy ekran admina wolny, CPU skacze przy każdym kliknięciu, a jeden callback admin_init pokazuje setki ms |
Przenieś skany na WP-Cron w ustawieniach wtyczki; jeśli takiego ustawienia nie ma, to już odpowiedź o tej wtyczce |
| Page buildery ładujące assety edytora wszędzie | Kolejkują pełny pakiet CSS/JS edytora na każdym ekranie admina, nie tylko tam, gdzie budujesz strony | Karta Network pokazuje skrypty buildera na ekranach, które go nigdy nie używają | Ogranicz builder do konkretnych typów wpisów w ustawieniach i szukaj opcji „ładuj assety tylko tam, gdzie używane” |
| Wtyczki marketingowe odpytujące zewnętrzne API | Ciągnie statystyki kampanii, liczby subskrybentów albo status sync z zewnętrznego serwisu przy ładowaniu admina | Wychodzące HTTP albo admin-ajax na każdym ekranie; szybkość admina śledzi humor API trzeciej strony | Wyłącz widget statystyk, wydłuż interwał sync albo ogranicz ślad admina wtyczki do jej własnych stron |
Żeby potwierdzić klasę: panel HTTP API Query Monitor łapie phone-home i polling, DevTools łapie assety i widgety, a timing per callback na admin_init łapie skanery. Nie musisz zgadywać — każda zostawia inny odcisk.
Jak diagnozować
- Otwórz DevTools na dowolnej stronie admina — Karta Network. Zanotuj czas ładowania głównej strony, potem policz żądania admin-ajax. Jeśli widzisz 5+ wywołań AJAX, to 5 pełnych bootstrapów WordPress.
-
Profiluj callbacki hooków —
SAVEQUERIESloguje tylko zapytania do bazy, nie czas PHP. Żeby zmierzyć funkcje naadmin_init, użyj profilera jak Slow Callback Finder WP Multitool albo owiń podejrzanych wmicrotime()i loguj delty. - Wyłączaj wtyczki po jednej — Mierz ładowanie admina po każdym wyłączeniu. Gdy przyspieszy, znalazłeś sprawcę. Żmudne, ale definitywne.
- Sprawdź liczbę zapytań do bazy — Zdrowa strona admina powinna robić 50–100 zapytań. Jeśli widzisz 300+, wtyczki dokładają zbędne zapytania do każdej strony admina. Zobacz poradnik wolnych zapytań, jak je tropić.
-
Monitoruj częstotliwość Heartbeat — W DevTools patrz na kartę Network 60 sekund i w payloadzie każdego
admin-ajax.phpszukajaction=heartbeat. Każde to pełne żądanie PHP. Dużo admin-ajax przy małej liczbie ticków Heartbeat znaczy, że ruch to wtyczki, nie Heartbeat.
Query Monitor pokazuje zapytania. Slow Callback Finder pokazuje callbacki.
Query Monitor to właściwy pierwszy krok: panel „Queries by Component” pokazuje liczbę zapytań do bazy i wywołań HTTP API per wtyczka. Ale gdy admin WordPress jest wolny, a liczba zapytań wygląda normalnie, wąskie gardło to zwykle czas PHP na admin_init, admin_menu albo admin_enqueue_scripts — a tego Query Monitor nie mierzy.
Slow Callback Finder WP Multitool mierzy każdy zarejestrowany callback na tych hookach i szereguje je w milisekundach — widzisz plugin_xyz::check_license() — 847 ms na admin_init zamiast zgadywać, którą wtyczkę wyłączyć. Działa obok Query Monitor, nie zamiast niego.
Godzina w DevTools i nadal nie możesz znaleźć?
Slow Callback Finder działa wewnątrz wp-admin i szereguje każdy callback hooka po czasie wykonania. Bez zgadywania, bez ruletki wyłącz-wszystko. To moduł Pro, nie ma go w edycji Lite za $9.
Zobacz, jak WP Multitool to znajduje →Szybkie wygrane, gdy wiesz, który przypadek masz
Zmniejsz częstotliwość Heartbeat
Zmiana Heartbeat z 15 s na 120 s obcina tło admin-ajax o 87% (karty edytora, 15 s → 120 s). Większość stron nie zauważy różnicy w działaniu.
Wyłącz widgety kokpitu
Każdy widget kokpitu odpala własne zapytania przy ładowaniu. Usuń widgety wtyczek, których nie sprawdzasz codziennie:
add_action('wp_dashboard_setup', function() {
remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
remove_meta_box('dashboard_primary', 'dashboard', 'side');
// Remove plugin widgets that make external API calls
});
Dodaj object cache
Redis albo Memcached poprawia wydajność admina, bo strony admina są ciężkie od zapytań i nigdy nie mają page cache. Lookupi bazy z każdej strony admina idą z pamięci.
Dlaczego wp-admin zwalnia z czasem
Wolny admin zwykle nie jest jednym wielkim problemem. Żadna pojedyncza wtyczka nie jest złoczyńcą. To kumulacja:
- 15 wtyczek po 50 ms na admin_init = 750 ms bazy
- Widgety kokpitu wołające zewnętrzne API przy każdym ładowaniu
- Handlery AJAX odpalające pełny bootstrap WordPress dla błahostek
- Autoloadowane dane rosną, często o dziesiątki KB miesięcznie, od rotacji wtyczek
Nie naprawisz tego, czego nie widzisz. Potrzebujesz timingu per callback — dokładnie ile leci każda funkcja, nie tylko która wtyczka jest wolna.
Autoloadowane dane na hostingu zarządzanym (WP Engine, Flywheel)
Jeśli jesteś na WP Engine albo Flywheel i panel admina jest wolny, najpierw sprawdź autoloadowane dane. WP Engine poleca trzymać łączne opcje autoload poniżej 800 KB. Powyżej każde żądanie admina ładuje za duży wynik wp_options do pamięci — a strony admina nigdy nie są w cache, więc czujesz pełny koszt przy każdym kliknięciu.
Na hostingach na memcached jak WP Engine z włączonym object cache rozdęcie autoloadu powyżej ~1 MB potrafi też dawać przerywane 502 — limit Memcached na klucz to 1 MB, więc blob autoloadu cicho nie wchodzi do cache.
Zaudytuj rozmiar autoloadu jednym zapytaniem:
-- Total autoloaded data (target: under 800 KB)
SELECT ROUND(SUM(LENGTH(option_value)) / 1024, 1) AS autoload_kb
FROM wp_options
WHERE autoload IN ('yes','on','auto','auto-on');
-- Top 20 biggest autoloaded options
SELECT option_name, ROUND(LENGTH(option_value) / 1024, 1) AS kb
FROM wp_options
WHERE autoload IN ('yes','on','auto','auto-on')
ORDER BY LENGTH(option_value) DESC
LIMIT 20;
Typowi sprawcy: stare transjenty, cache sprawdzania aktualizacji wtyczek i za duże bloby motywu/opcji z page builderów. Bezpieczna poprawka to wyłączenie autoload na pojedynczych opcjach — wp option set-autoload OPTION_NAME off — nie hurtowe kasowanie wierszy. Autoloader Optimizer WP Multitool szereguje sprawców i wyłącza autoload bezpiecznie.
Jeśli autoload jest już poniżej 800 KB, a panel admina nadal bardzo wolny, wąskie gardło przeszło na callbacki hooków — tam wkracza Slow Callback Finder.
Przed i po: jak wygląda „naprawione”
Nie pokażę ci wymyślonych liczb klientów — before/after, którego nie zmierzyłeś, to fikcja. Mogę dać arkusz, który wypełniam, zanim cokolwiek ruszę. Wypełnij go najpierw, zmieniaj po jednej rzeczy i mierz po każdej zmianie. Bez kolumny „przed” nigdy nie wiesz, która poprawka zadziałała.
| Metryka | Jak to złapać | Jak wygląda „naprawione” |
|---|---|---|
| TTFB admina | Karta Network DevTools, pierwsze żądanie dokumentu na /wp-admin/. Załaduj 3 razy, weź medianę |
Obetnij z grubsza o połowę od własnej bazy — delta to pass, nie liczba bezwzględna |
| Rozmiar autoloadu (KB) | Zapytanie SQL w sekcja autoloadu | Poniżej 800 KB łącznie |
| Najwolniejszy callback admin_init (ms) | Slow Callback Finder albo delty microtime() wokół podejrzanych |
Twój najgorszy callback wyraźnie poniżej liczby „przed”; 200 ms z checklisty to zgrubny trop, nie twardy próg |
| Ticki Heartbeat na minutę | Karta Network DevTools, filtr „admin-ajax”, licz żądania z action=heartbeat w payloadzie przez minutę |
Z grubsza jeden tick co 2 minuty na bezczynnej karcie admina po zmianie interwału na 120 s; wysoki łączny admin-ajax przy małej liczbie ticków Heartbeat wskazuje na wtyczki, nie Heartbeat |
| Zapytania na stronę admina | Łączna liczba zapytań Query Monitor na typowym ekranie | 50–100; powyżej 300 znaczy, że wtyczka źle się zachowuje |
Dwie zasady robią liczby uczciwymi. Mierz na tej samej stronie, tej samej przeglądarce, o tej samej porze — obciążenie admina zależy od aktywności zespołu. I zmieniaj jedną rzecz między pomiarami, inaczej nie przypiszesz poprawy niczemu. Wartości bezwzględne znaczą mniej niż delty: obcięcie TTFB admina o połowę na tanim hostingu bije „szybką” liczbę, której nie odtworzysz.
FAQ: wolny admin WordPress
Dlaczego mój admin WordPress jest taki wolny?
Admin WordPress jest wolny, bo wp-admin całkowicie omija page cache. Każde żądanie admina bootuje pełny stos WordPress, odpala hooki admina każdej aktywnej wtyczki (admin_init, admin_menu, admin_enqueue_scripts), ładuje cały zestaw autoload z wp_options i może odpalić kilka równoległych żądań admin-ajax.php. Frontend może być szybki, bo jest w cache — panel admina nie.
Dlaczego admin WordPress jest wolny, a frontend szybki?
Strony frontendu idą z object cache, page cache albo CDN. Kokpit WordPress zawsze składa PHP na serwerze od zera. Wtyczka, która dokłada 50 ms do admin_init, w ogóle nie rusza cache’owanego frontendu — ale sumuje się przy każdym kliknięciu w adminie. Dlatego podniesienie hostingu pomaga na chwilę, a potem panel znowu jest wolny.
Dlaczego kokpit WordPress jest wolny, a inne strony admina w porządku?
Wtedy problemem jest sam ekran główny kokpitu, nie cały wp-admin. Widgety kokpitu odpalają własne zapytania przy każdym ładowaniu, widget Wydarzenia & aktualności pobiera zdalny feed WordPress.org, a widgety wtyczek często wołają API vendora, żeby wyrenderować pudełko ze statystykami. Usuń widgety, których nie sprawdzasz codziennie, przez remove_meta_box() na wp_dashboard_setup. Jeśli każdy ekran admina jest tak samo wolny, patrz na dane autoload i callbacki admin_init — widgety nie są wąskim gardłem.
Jak znaleźć, która wtyczka spowalnia admina WordPress?
Metoda ręczna: wyłączaj wtyczki po jednej i mierz ładowanie admina po każdej. Szybsza: profiluj callbacki hooków. Query Monitor pokazuje zapytania do bazy per wtyczka; Slow Callback Finder WP Multitool idzie głębiej — szereguje każdy callback admin_init i admin_menu po czasie, więc widzisz konkretną funkcję, nie tylko nazwę wtyczki.
Ile autoloadowanych danych to za dużo dla wp-admin?
WP Engine poleca trzymać łączne autoloadowane dane poniżej 800 KB. Powyżej każde żądanie admina ładuje za duży wynik wp_options do pamięci. Na hostingach na memcached jak WP Engine rozdęcie autoloadu powyżej ~1 MB potrafi też dawać 502, bo limit Memcached na klucz to 1 MB. Audytuj jednym zapytaniem SQL albo Autoloader Optimizer WP Multitool.
Czy podniesienie hostingu naprawia wolny kokpit WordPress?
Czasem — jeśli jesteś na hostingu współdzielonym z 128 MB pamięci PHP i bez object cache. Ale jeśli już jesteś na hostingu zarządzanym (WP Engine, Flywheel), a panel nadal wolny, wąskie gardło to prawie zawsze callbacki wtyczek, rozdęcie autoloadu albo ruch admin-ajax — nie specyfikacja serwera. Więcej RAM nie naprawi 800 ms sprawdzania licencji na każdej stronie admina.
Jak przyspieszyć admina WordPress bez wyłączania wtyczek?
Zacznij od trzech zmian niskiego ryzyka: (1) zwolnij Heartbeat z 15 s do 120 s, (2) usuń widgety kokpitu z zewnętrznym API, (3) włącz object cache, jeśli hosting to daje. Potem profiluj callbacki hooków, żeby znaleźć jedną funkcję kosztującą setki milisekund — napraw albo wymień tę wtyczkę, zamiast obcinać funkcje na całej stronie.
Powiązane poradniki
Znajdź konkretny callback spowalniający admina WordPress
Slow Callback Finder WP Multitool mierzy każdy callback hooka w wp-admin i szereguje je po czasie. Widzisz plugin_xyz::check_license() — 847 ms na admin_init zamiast wyłączać wtyczki po jednej. Działa obok Query Monitor. Zero wpływu na frontend.