Strona główna / Przypadki z praktyki
Sporadyczne spowolnienie o 3 sekundy bez winowajcy wśród wtyczek
Objawy
Z pamięci podręcznej strony ładowały się w ok. 0,15 s. Bez niej (koszyk, kasa, logowanie, pierwsza wizyta po wyczyszczeniu cache) wahało się to od 0,8 do 4 s. Subiektywnie „strona bywa leniwa”.
Środowisko
WordPress z WooCommerce, page builderem i ok. 40 aktywnymi wtyczkami, hosting współdzielony z LiteSpeedem i jego cache.
Diagnoza
- Powtarzane pomiary. Kilka stron poza cache wczytywaliśmy co 75 s przez kilka minut. Spowolnienie nie było związane ze stroną główną: równie często dotyczyło zwykłej strony tekstowej. Mniej więcej połowa żądań w serii miała +3 s. Równe 3 s więcej wyglądały na timeout zewnętrznego wywołania (serwer licencji, API, fonty).
- Tymczasowa diagnostyczna wtyczka mu-plugin (za zgodą, bez danych osobowych). Logowała czas do głównych faz żądania (
muplugins_loaded,plugins_loaded,init,wp_loaded,template_redirect,shutdown) i każde zewnętrzne wywołanie HTTP przez filtrypre_http_requestihttp_api_debug. - Wynik był zaskakujący: wolne żądania (ok. 3,3 s, mniej więcej jedno na piętnaście) nie miały żadnego zewnętrznego wywołania HTTP. Spowolnione były wszystkie fazy równomiernie, najbardziej start do
plugins_loaded(1,3 s zamiast 0,12 s). Żadna wtyczka więc się nie wyróżniała. - Mu-plugin i jego log usunęliśmy zaraz po pomiarze i sprawdziliśmy, że adres zwraca 404.
Przyczyna
Równomierne spowolnienie całego żądania bez zewnętrznych wywołań odpowiada zimnemu procesowi PHP na hostingu współdzielonym. Żądanie dostaje nowy proces z pustym opcache, który musi ponownie wczytać i skompilować kod wszystkich wtyczek. Nie jest to wina ani wtyczki, ani strony.
Co grozi, jeśli tego nie naprawisz
Wolne są właśnie te strony, na których się zarabia: koszyk, kasa i konto klienta. Każda dodatkowa sekunda czekania zwiększa liczbę porzuconych koszyków, a Google wlicza wolną odpowiedź serwera do oceny szybkości. Szukanie winowajcy wśród wtyczek kosztuje do tego czas i pieniądze za niepotrzebne zmiany.
Naprawa
Po stronie strony nie ma czego naprawiać. Zaleciliśmy:
- zapytać pomoc techniczną hostingu o liczbę procesów PHP, jak długo żyją i jaki rozmiar ma opcache,
- długofalowo zmniejszyć liczbę aktywnych wtyczek, żeby zimny start trwał krócej.
Odwiedzających, którym strony ładują się z cache, to nie dotyczy.
Weryfikacja
Głównym ustaleniem było wykluczenie: żadnego zewnętrznego wywołania i żadnej pojedynczej wtyczki. Zaoszczędziło to godzin wyłączania wtyczek na ślepo.
Zapobieganie i wnioski
Zanim zaczniesz szukać winowajcy wśród wtyczek, zmierz, które fazy żądania zwalniają. Jeśli wszystkie zwalniają tak samo, problem leży pod WordPressem (PHP, dysk, hosting), a nie w nim.
Powiązane usługi: Awarie i błędy Przyspieszenie strony