Najpierw ustal, gdzie schodzi czas
Czas do pierwszego bajtu odpowiedzi mówi, ile trwa praca serwera. Jeżeli wynosi kilkaset milisekund, problem jest po stronie serwera i tam trzeba pracować. Jeżeli jest niski, a strona i tak ładuje się wolno, problem leży w treści: za duże obrazy, blokujące skrypty, zbyt wiele żądań. Zmiany w konfiguracji serwera nie pomogą wtedy w żadnym stopniu.
Baza danych zwykle pierwsza
W większości wolnych stron opartych o system zarządzania treścią czas schodzi na zapytaniach do bazy. Włączenie dziennika wolnych zapytań na dobę pokazuje zwykle kilka zapytań odpowiadających za większość opóźnienia. Najczęstsza przyczyna to brakujący indeks albo zapytanie przeszukujące całą tabelę przy każdym wyświetleniu strony. Dodanie jednego indeksu bywa skuteczniejsze niż podwojenie mocy serwera.
PHP-FPM i OPcache
- OPcache włączony i z limitem pamięci dobranym do wielkości kodu - bez tego kod jest kompilowany przy każdym żądaniu
- liczba procesów dobrana do dostępnej pamięci, a nie ustawiona losowo; za dużo procesów kończy się wyczerpaniem pamięci przy szczycie ruchu
- osobna pula procesów dla każdego serwisu, jeśli na serwerze jest ich kilka
- limit czasu wykonania ustawiony świadomie, żeby zawieszone żądanie nie blokowało procesu na kwadrans
Warstwa serwera WWW
Kompresja odpowiedzi tekstowych, HTTP/2, poprawne nagłówki pamięci podręcznej dla plików statycznych i serwowanie obrazów w nowoczesnych formatach dają razem wyraźną poprawę przy niewielkim nakładzie. Nagłówki pamięci podręcznej są przy tym najczęściej pomijane - przeglądarka pobiera te same pliki przy każdej wizycie, bo nikt nie powiedział jej, że może je zachować.
Pamięć podręczna po stronie serwera jest skuteczna, ale wymaga świadomej decyzji, co i na jak długo. Zapamiętana strona koszyka albo panel zalogowanego użytkownika to poważny błąd, który potrafi pokazać dane jednego klienta drugiemu.
Na końcu sprzęt
Dołożenie pamięci i szybszych dysków ma sens dopiero wtedy, gdy pomiar pokazuje, że one są wysycone. U klientów, u których przeprowadzaliśmy optymalizację, w większości przypadków ten sam serwer po poprawkach obsługiwał kilkukrotnie większy ruch niż przed nimi.