Wydajność admina

Dlaczego mój admin WordPress jest taki wolny?

Frontend ładuje się w 1,2 sekundy. Kokpit WordPress bierze 6+. Każde kliknięcie w adminie jak dial-up. To nie hosting — to to, co leci wewnątrz wp-admin przy każdym żądaniu.

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.

Schemat

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

Rozsądna rada
  • „Zaktualizuj wersję PHP”
  • „Przejdź na lepszy hosting”
  • „Zainstaluj wtyczkę cache”
  • „Wyłącz wtyczki, których nie używasz”
  • „Podnieś limit pamięci”
Czego ci nie powie
  • 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ć.

  1. 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.
  2. Minuty 2–4: zwolnij Heartbeat do 120 sekund — Dodaj filtr heartbeat_settings z przyczyna nr 2 poniżej. Ponów 60-sekundowe liczenie żądań action=heartbeat. Pass: ticki spadają do mniej więcej jednego co 2 minuty.
  3. 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.
  4. 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.
  5. 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.
  6. Minuty 12–15: uszereguj callbacki admin_init — Zmierz, co leci na admin_init, Slow Callback Finder WP Multitool albo owijając podejrzanych w microtime() (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.

Wolny jest tylko ekran główny kokpitu
  • 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
Każdy ekran wp-admin jest wolny
  • 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ć

  1. 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.
  2. Profiluj callbacki hooków — SAVEQUERIES loguje tylko zapytania do bazy, nie czas PHP. Żeby zmierzyć funkcje na admin_init, użyj profilera jak Slow Callback Finder WP Multitool albo owiń podejrzanych w microtime() i loguj delty.
  3. Wyłączaj wtyczki po jednej — Mierz ładowanie admina po każdym wyłączeniu. Gdy przyspieszy, znalazłeś sprawcę. Żmudne, ale definitywne.
  4. 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ć.
  5. Monitoruj częstotliwość Heartbeat — W DevTools patrz na kartę Network 60 sekund i w payloadzie każdego admin-ajax.php szukaj action=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.

87%
Mniej żądań w tle (karty edytora, 15 s → 120 s)
300+ → 50
Zapytania z pamięci przy ciepłym object cache
300+
Zapytania na rozdętych stronach admina

Dlaczego wp-admin zwalnia z czasem

Wolny admin zwykle nie jest jednym wielkim problemem. Żadna pojedyncza wtyczka nie jest złoczyńcą. To kumulacja:

  1. 15 wtyczek po 50 ms na admin_init = 750 ms bazy
  2. Widgety kokpitu wołające zewnętrzne API przy każdym ładowaniu
  3. Handlery AJAX odpalające pełny bootstrap WordPress dla błahostek
  4. 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.

Haczyk 1 MB

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.

Weź Pro — od $79/rok Poradnik wolnych zapytań Albo Lite — $9 jednorazowo, 11 modułów (nie ten) →