WordPress Heartbeat API może spowolnić Twojego WordPressa

WordPress Heartbeat API

WordPress Heartbeat API to mechanizm pozwalający na komunikację naszego serwisu z przeglądarką internetową klienta. Jest to rozwiązanie natywne, które otrzymujemy wraz z instalacją od wersji 3.6. Niestety WordPress Heartbeat API może także znacznie spowolnić Twojego WordPressa. Sprawdź czym jest ten mechanizm i jak ograniczyć negatywne skutki jego działania.

Czym jest WordPress Heartbeat API

WordPress Heartbeat API to najprościej mówiąc funkcja, którą można przyrównać do bicia serca WordPressa. Interfejs API uruchamia zestaw zadań w odstępach czasu lub “bije” co np. 15 lub 60 sekund wykorzystując plik admin-ajax.php do obsługi żądań AJAX.  Jest on wykorzystywany przez CMS oraz jego wtyczki i motywy do wyświetlania notyfikacji w kokpicie WordPressa, automatycznego zapisywania szkiców wpisów, czy wylogowywania użytkownika z powodu bezczynności. 

Negatywne skutki działania mechanizmu 

Na pierwszy rzut oka mechanizm wydaje się być użyteczny i pomocny. Niestety jego działanie ma także negatywne skutki dla naszej strony. WordPress Heartbeat API używa wywołań wp-admin/admin-ajax.php. Im więcej akcji takich jak autozapis przy wielu zalogowanych użytkownikach WordPressa albo wielu otwartych kartach, tym więcej wywołań admin-ajax.php do serwera. Im więcej zapytań do serwera – tym większe jest jego obciążenie, a dokładniej utylizacja CPU (procesora). 

Obciążony serwer powoduje wydłużenie czasu ładowania się strony WWW. Ryzyko to jest szczególnie duże w przypadku serwerów współdzielonych z limitami użycia CPU. 
W logach serwera zapytania wp-admin/admin-ajax.php wyglądają następująco:

<IP> <USER> <DATETIME> POST /wp-admin/admin-ajax.php 200 
/path/to/website/wp-admin/admin-ajax.php /wp-admin/admin-ajax.php 1494.224

<IP> <USER> <DATETIME> POST /wp-admin/admin-ajax.php 200 
/path/to/website/wp-admin/admin-ajax.php /wp-admin/admin-ajax.php 1449.133

<IP> <USER> <DATETIME> POST /wp-admin/admin-ajax.php 200 
/path/to/website/wp-admin/admin-ajax.php /wp-admin/admin-ajax.php 1695.123

<IP> <USER> <DATETIME> POST /wp-admin/admin-ajax.php 200 
/path/to/website/wp-admin/admin-ajax.php /wp-admin/admin-ajax.php 2956.308

Ostatnia wartość w każdej linii prezentuje czas wykonania skryptu w milisekundach. Wartość powyżej 2000 milisekund może budzić niepokój, szczególnie jeśli strona zauważalnie zwolniła.

Wielokrotnie widziałem logi, z których wynikało, że większość zapytań obsługiwanych przez prostą stronę lub sklep dotyczyło admin-ajax.php wywołując tym samym znaczne obciążenie serwera. 

Potrzebujesz hostingu z wydajnym procesorem? Postaw na hosting w LH.pl!

Czy na pewno potrzebny jest nam mechanizm Heartbeat w standardowej konfiguracji?

W znacznej większości przypadków nie. Co więcej, istnieje możliwość ograniczenia jego działania oraz ewentualnych problemów, które może powodować. Jeżeli więc otrzymałeś od swojego hostingodawcy informacje o dużym zużyciu CPU, odnotowałeś spowolnienie swojej strony lub po prostu chcesz lepiej panować nad jej działaniem – sprawdź czy nie odpowiada za to mechanizm Heartbeat w WordPressie. Zweryfikujesz to analizując liczbę wywołań admin-ajax.php w logach swojego serwera. 

Zmień częstotliwość działania WordPress Heartbeat API

Zastanów się, czy na pewno potrzebujesz np. autozapisu wpisów lub stron w takim cyklu, jaki proponuje natywna instalacja WordPressa. W przypadku autozapisu stron i wpisów jest to 15 sekund, a w przypadku pozostałej części kokpitu 60 sekund. Jeżeli dojdziesz do wniosku, że warto zmniejszyć tempo bicia serca, możesz skorzystać z wtyczki Heartheat Control.

Dzięki niej w prosty sposób ustawisz częstotliwość uderzeń serca swojego WordPressa. Sugeruję Ci, byś zaczął od zwiększenia interwału do maksymalnej wartości, czyli ustawienia jak najdłuższej przerwy między zapytaniami. Gdy zapiszesz modyfikacje, sprawdź, czy Twoja strona działa poprawnie. 

Wyłącz Heartbeat w swoim WordPressie 

Jeżeli ograniczenie interwału nie przyniosło pożądanych skutków lub doszedłeś do wniosku, że nie potrzebujesz tego mechanizmu, wyłącz go. Możesz wykonać to za pomocą wtyczki lub bezpośrednio poprzez edycję pliku functions.php

UWAGA! Pamiętaj, że chcąc edytować ten plik, powinieneś najpierw stworzyć motyw potomny w WordPressie. 

Jeżeli wyedytujesz go bez motywu potomnego, wprowadzone zmiany zostaną nadpisane przy najbliższej aktualizacji motywu. O tym jak stworzyć motyw potomny i prawidłowo wprowadzać zmiany do functions.php, dowiesz się z naszego artykułu. Dodatkowo dobrą praktyką jest wykonanie kopii zapasowej WordPressa, zanim przystąpisz do edycji kodu. W razie pomyłki łatwo cofniesz wprowadzone zmiany, przywracając stronę do działania. 

motyw potomny

ZOBACZ RÓWNIEŻ

Jak stworzyć motyw potomny w WordPressie

Motyw potomny to taki motyw, który dziedziczy wygląd swojego motywu rodzica i zawiera jedynie nasze własne modyfikacje.

Sprawdź

Aby wyłączyć Heartbeat w swoim WordPressie wprowadź następujący kod do pliku functions.php:

add_action( 'init', 'stop_heartbeat', 1 );
function stop_heartbeat() {
wp_deregister_script('heartbeat');
}

Po wprowadzeniu kodu zapisz zmiany i przetestuj działanie swojej strony. 

Potrzebujesz hostingu z wydajnym procesorem? Postaw na hosting w LH.pl!

Zapisz się do newslettera!

Chcesz brać udział w naszych webinarach na żywo i otrzymywać raz w miesiącu porady optymalizacyjne? Dołącz do naszego newslettera.

Default image
Krzysztof Łuczak
Administrator w firmie LH.pl. Uwielbia automatyzować programując (Python, Bash, Golang) i nie tylko tak. W wolnym czasie muzyk. Absolwent informatyki na Politechnice Poznańskiej. Udziela się w KSM.

Zostaw komentarz