Przejdź do treści

Sklep internetowy działa wolno. Jak znaleźć przyczynę przed zmianą serwera?

autor: Jacek Sultan Utrzymanie ecommerce 9 minut czytania

Sklep działa wolno, więc potrzebuje mocniejszego serwera? Niekoniecznie. Przyczyną może być baza danych, kod aplikacji, zewnętrzne API, cache albo JavaScript w przeglądarce. Zobacz, jak znaleźć miejsce, w którym sklep rzeczywiście traci czas.

W skrócie

Wolny sklep nie musi potrzebować mocniejszego serwera. Przyczyną może być pojedyncze zapytanie do bazy danych, zewnętrzne API, źle działający cache, ciężki kod JavaScript, zadanie wykonywane podczas żądania albo proces, który przeciąża serwer tylko w określonych godzinach.

Zanim zwiększysz CPU i RAM albo przeniesiesz sklep na droższy hosting, warto ustalić, na którym etapie rzeczywiście tracony jest czas. Dopiero wtedy wiadomo, czy potrzebna jest optymalizacja aplikacji, bazy danych, integracji czy infrastruktury.

Najpierw ustal, co właściwie działa wolno

Informacja, że sklep działa wolno, niewiele mówi programiście. Strona główna może otwierać się w sekundę, podczas gdy wyszukiwarka potrzebuje pięciu sekund, dodanie produktu do koszyka trwa trzy, a zapis zamówienia czeka na odpowiedź zewnętrznego systemu.

Dlatego pierwszym krokiem powinno być odtworzenie konkretnej sytuacji.

Warto zapisać adres strony, wykonywaną czynność, przybliżony czas wystąpienia spowolnienia, urządzenie, informację o zalogowaniu użytkownika oraz dane mające znaczenie dla procesu, na przykład zawartość koszyka, wybraną metodę dostawy czy sposób płatności.

Jeżeli spowolnienie występuje tylko czasami, dokładna godzina jest szczególnie cenna. Można wtedy porównać ją z logami aplikacji, wykorzystaniem zasobów serwera, zapytaniami do bazy i działaniem integracji.

PageSpeed nie odpowie na każde pytanie

PageSpeed Insights i Core Web Vitals są bardzo przydatne, ale nie są pełną diagnostyką wydajności sklepu.

LCP pomaga ocenić szybkość wyświetlenia głównej treści, INP reakcję strony na interakcje użytkownika, a CLS stabilność układu. Dzięki nim można znaleźć problemy widoczne z perspektywy przeglądarki i użytkownika.

Sklep jest jednak aplikacją, a nie tylko zestawem stron do wyświetlenia.

PageSpeed może pokazywać dobre wyniki dla karty produktu, podczas gdy wyszukiwanie, naliczanie rabatu, wybór Paczkomatu, zapis zamówienia albo panel administracyjny działają zdecydowanie za wolno.

Dlatego diagnostyka powinna obejmować również konkretne operacje wykonywane podczas korzystania ze sklepu.

Sprawdź, ile czasu zajmuje odpowiedź aplikacji

Jeżeli użytkownik długo czeka, zanim przeglądarka zacznie otrzymywać właściwą odpowiedź, trzeba przeanalizować backend.

Pomocny może być TTFB, ale nie należy traktować go jako dokładnego pomiaru czasu wykonywania kodu PHP czy odpowiedzi samego serwera. Na wynik wpływają również między innymi połączenie, przekierowania, CDN i cache.

Dlatego po wykryciu wysokiego czasu odpowiedzi warto zejść poziom niżej i zmierzyć, co aplikacja robi podczas konkretnego żądania.

Może się wtedy okazać, że z pięciu sekund oczekiwania cztery zajmuje jedno zapytanie SQL albo oczekiwanie na odpowiedź zewnętrznego API.

Baza danych często ujawnia prawdziwą przyczynę

Sklep wykonuje dużą liczbę operacji na bazie danych. Pobiera produkty, ceny, warianty, stany magazynowe, klientów, zamówienia, ustawienia, promocje i dane potrzebne w integracjach.

Problem pojawia się, gdy pojedyncza operacja wykonuje bardzo ciężkie zapytanie albo kilkaset małych zapytań, które razem zaczynają zajmować znaczną część czasu.

Warto szukać między innymi wolnych zapytań SQL, brakujących indeksów, pobierania znacznie większej liczby rekordów niż potrzeba, wielokrotnego pobierania tych samych danych oraz zapytań uruchamianych osobno dla każdego elementu listy.

Znaczenie ma również skala. Rozwiązanie działające poprawnie przy 5 tysiącach produktów może zachowywać się zupełnie inaczej przy 200 tysiącach produktów i kilku milionach rekordów związanych z zamówieniami.

Jedna integracja może zatrzymać cały request

Sklepy coraz częściej zależą od zewnętrznych systemów. Podczas jednego procesu mogą komunikować się z ERP, magazynem, systemem kurierskim, operatorem płatności, CRM, systemem lojalnościowym albo usługą obliczającą dostępność produktu.

Jeżeli aplikacja czeka na odpowiedź takiej usługi przed wysłaniem odpowiedzi użytkownikowi, jej opóźnienie staje się opóźnieniem sklepu.

Dlatego podczas diagnostyki trzeba mierzyć czas poszczególnych połączeń zewnętrznych, a nie tylko całego żądania.

Jeżeli konkretne API regularnie odpowiada po trzech sekundach, zwiększenie liczby rdzeni procesora na serwerze sklepu tego czasu nie skróci.

Warto wtedy sprawdzić, czy dane rzeczywiście muszą być pobierane synchronicznie, czy można wykorzystać cache, przygotować je wcześniej albo przenieść część operacji do kolejki.

Nie każdą operację można jednak bezpiecznie opóźnić. Aktualna cena, dostępność produktu czy potwierdzenie płatności mogą być niezbędne do poprawnego wykonania zamówienia. Architektura musi uwzględniać znaczenie danych, a nie tylko szybkość odpowiedzi.

Sprawdź zadania wykonywane podczas żądania

Częstą przyczyną wolnego działania jest wykonywanie zbyt dużej ilości pracy w momencie, gdy użytkownik czeka na odpowiedź.

Po zapisaniu zamówienia sklep może na przykład aktualizować inne systemy, generować dokumenty, wysyłać wiadomości, przeliczać dane, synchronizować magazyn albo wykonywać operacje potrzebne dopiero kilka sekund później.

Część takich zadań można wykonywać asynchronicznie w kolejce. Użytkownik otrzymuje wtedy odpowiedź po wykonaniu operacji koniecznych do zakończenia procesu, a pozostała praca odbywa się w tle.

Przy analizie trzeba jednak dokładnie ustalić, które operacje są wymagane przed potwierdzeniem zamówienia. Przeniesienie wszystkiego do kolejki może przyspieszyć odpowiedź, ale jednocześnie stworzyć problemy ze spójnością danych.

Cache pomaga tylko wtedy, gdy buforujesz właściwe dane

Cache pozwala uniknąć wielokrotnego wykonywania tej samej pracy. Może dotyczyć całych stron, fragmentów odpowiedzi, wyników zapytań, danych z API albo obiektów wykorzystywanych przez aplikację.

Nie każda część sklepu nadaje się jednak do buforowania w ten sam sposób.

Lista kategorii może być wspólna dla tysięcy użytkowników, ale zawartość koszyka, indywidualny rabat, ceny B2B czy dane klienta już nie.

Źle skonfigurowany cache może powodować nie tylko problemy z wydajnością, ale również wyświetlanie nieaktualnych lub niewłaściwych danych.

Podczas optymalizacji trzeba więc określić, co można buforować, jak długo dane mogą pozostać aktualne i jakie zdarzenie powinno je unieważnić.

CPU na poziomie 100% jest informacją, a nie diagnozą

Jeżeli podczas spowolnienia procesor jest w pełni wykorzystany albo kończy się dostępna pamięć RAM, infrastruktura rzeczywiście może być ograniczeniem.

Nadal warto jednak ustalić, dlaczego tak się dzieje.

CPU może zużywać normalny ruch klientów, ale równie dobrze przyczyną może być źle działające zadanie cykliczne, import produktów, generowanie feedu, bot intensywnie przeglądający tysiące adresów albo jedna kosztowna operacja wykonywana przy każdym wejściu użytkownika.

Do podobnej sytuacji może dojść z pamięcią, bazą danych i operacjami dyskowymi.

Dodanie zasobów może chwilowo zmniejszyć objawy, ale jeżeli przyczyna skaluje się razem z ruchem lub ilością danych, sytuacja może wrócić po kilku tygodniach.

Sprawdź, czy problem pojawia się pod obciążeniem

Sklep może działać bardzo szybko podczas testu wykonywanego rano przez jednego programistę i zwalniać każdego dnia o 19:00.

Dlatego pojedynczy pomiar nie zawsze wystarczy.

Warto porównać czas odpowiedzi z wykorzystaniem CPU, RAM, bazy danych, liczbą jednoczesnych żądań i działaniem procesów wykonywanych w tle.

Jeżeli spowolnienie pojawia się regularnie o podobnej godzinie, trzeba sprawdzić również harmonogram zadań. Import produktów, synchronizacja stanów, generowanie raportów albo backup uruchamiany w tym samym czasie może konkurować o zasoby z klientami sklepu.

Problem może być również w przeglądarce

Szybka odpowiedź backendu nie oznacza jeszcze szybkiego interfejsu.

Strona może pobierać dużą ilość JavaScriptu, wykonywać kosztowne operacje w głównym wątku albo uruchamiać wiele skryptów marketingowych i analitycznych.

W takim przypadku serwer może zwracać odpowiedź szybko, ale użytkownik nadal będzie czekał na możliwość swobodnej interakcji ze stroną.

To właśnie jeden z powodów, dla których podczas diagnostyki warto rozdzielić czas odpowiedzi backendu od pracy wykonywanej później w przeglądarce.

Kiedy mocniejszy serwer rzeczywiście ma sens?

Zwiększenie zasobów jest uzasadnione, gdy pomiary pokazują, że aplikacja wykorzystuje dostępne zasoby i właśnie ich brak ogranicza wydajność.

Może to być procesor, pamięć RAM, baza danych, przepustowość albo wydajność operacji dyskowych.

Większy serwer może być również normalnym elementem skalowania sklepu, który obsługuje coraz więcej klientów, produktów i zamówień.

Nie powinien jednak zastępować diagnozy.

Jeżeli aplikacja przez cztery sekundy czeka na zewnętrzne API, zapytanie SQL skanuje miliony niepotrzebnych rekordów albo przeglądarka blokuje się na wykonywaniu JavaScriptu, dodatkowe CPU nie usuwa właściwej przyczyny.

Jak potwierdzić, że optymalizacja rzeczywiście pomogła?

Po wprowadzeniu zmiany trzeba ponownie wykonać dokładnie ten proces, który wcześniej działał wolno.

Jeżeli zapis zamówienia trwał 4,8 sekundy, mierzymy ponownie zapis zamówienia. Jeżeli wyszukiwarka zwalniała przy konkretnej frazie, testujemy tę samą frazę. Jeżeli problem występował pod obciążeniem, sprawdzamy zachowanie również przy większej liczbie jednoczesnych użytkowników.

Warto porównywać nie tylko średnią. Pojedyncze bardzo wolne odpowiedzi mogą być dla sklepu równie istotne jak przeciętny czas działania.

Po optymalizacji trzeba też sprawdzić poprawność działania. Skrócenie czasu odpowiedzi nie jest sukcesem, jeżeli cache pokazuje nieaktualną cenę albo operacja przeniesiona do kolejki czasami nie dochodzi do skutku.

Najpierw pomiar, później decyzja o infrastrukturze

Wydajność sklepu jest wynikiem działania wielu warstw: przeglądarki, sieci, aplikacji, bazy danych, cache, kolejek, integracji i infrastruktury.

Dlatego informacja, że sklep jest wolny, nie powinna automatycznie prowadzić do zakupu droższego serwera.

Najpierw warto znaleźć operację, która odpowiada za opóźnienie, zmierzyć ją i ustalić jej przyczynę. Czasami rozwiązaniem będzie indeks w bazie danych, czasami cache, zmiana działania integracji albo przeniesienie zadania do kolejki. W innych przypadkach pomiary rzeczywiście pokażą, że infrastruktura jest za mała.

W Dock zaczynamy optymalizację właśnie od takiej diagnostyki. Jeżeli masz konkretny widok, proces albo moment, w którym sklep zwalnia, możemy przeanalizować wydajność aplikacji i infrastruktury i wskazać, gdzie faktycznie tracony jest czas.

Jeżeli chcesz sprawdzić przyczynę przed zmianą serwera, napisz do nas i opisz, który element sklepu działa wolno oraz kiedy najłatwiej

Masz pytania?

Dlaczego sklep internetowy działa wolno?
Przyczyn może być wiele: wolne zapytania do bazy danych, nieoptymalny kod aplikacji, zewnętrzne API, źle skonfigurowany cache, duża ilość JavaScriptu, procesy działające w tle albo zbyt małe zasoby serwera. Dlatego przed rozpoczęciem optymalizacji warto ustalić, na którym etapie rzeczywiście powstaje opóźnienie.
Czy wolny sklep potrzebuje mocniejszego serwera?
Nie zawsze. Większy serwer pomoże, jeżeli ograniczeniem rzeczywiście są dostępne zasoby, na przykład CPU, RAM lub wydajność bazy danych. Nie przyspieszy jednak zewnętrznego API odpowiadającego przez kilka sekund ani nie naprawi nieefektywnego zapytania SQL czy ciężkiego kodu JavaScript działającego w przeglądarce.
Jak sprawdzić, dlaczego sklep działa wolno?
Najlepiej zacząć od konkretnej operacji, która działa wolno, na przykład wyszukiwania produktu, otwarcia kategorii, dodania produktu do koszyka lub złożenia zamówienia. Następnie można zmierzyć czas odpowiedzi aplikacji, zapytania do bazy danych, połączenia z zewnętrznymi usługami oraz pracę wykonywaną w przeglądarce.
Czy PageSpeed Insights wystarczy do sprawdzenia wydajności sklepu?
Nie. PageSpeed Insights jest przydatny do oceny szybkości i doświadczenia użytkownika na konkretnych stronach, ale nie pokazuje całego działania aplikacji. Sklep może mieć dobre wyniki dla karty produktu, a jednocześnie wolno wyszukiwać produkty, przeliczać koszyk, zapisywać zamówienia lub działać w panelu administracyjnym.
Czy baza danych może spowalniać sklep internetowy?
Tak. Przyczyną mogą być między innymi wolne zapytania SQL, brakujące indeksy, pobieranie zbyt dużej liczby rekordów albo wielokrotne wykonywanie podobnych zapytań. Problemy często stają się widoczne dopiero po zwiększeniu liczby produktów, klientów lub zamówień.
Czy integracje zewnętrzne mogą spowolnić sklep?
Tak. Jeżeli sklep podczas obsługi użytkownika czeka na odpowiedź ERP, magazynu, operatora dostawy, systemu płatności lub innej usługi, czas odpowiedzi tej integracji może wpływać na cały proces. W takim przypadku zwiększenie zasobów serwera sklepu nie musi przynieść poprawy.
Czy cache zawsze przyspiesza sklep?
Cache może znacząco ograniczyć ilość pracy wykonywanej przez aplikację, ale musi być prawidłowo zaprojektowany. Inaczej buforuje się publiczną kategorię produktów, a inaczej koszyk, indywidualne ceny B2B czy dane zalogowanego klienta. Nieprawidłowa konfiguracja może prowadzić do wyświetlania nieaktualnych lub niewłaściwych danych.
Dlaczego sklep zwalnia tylko w określonych godzinach?
Przyczyną może być większy ruch, ale również zadania wykonywane cyklicznie, takie jak import produktów, synchronizacja stanów magazynowych, generowanie feedów, raportów lub kopii zapasowych. Warto porównać moment wystąpienia spowolnienia z wykorzystaniem zasobów serwera i harmonogramem procesów działających w tle.
Jak sprawdzić, czy problem leży po stronie serwera czy przeglądarki?
Trzeba osobno zmierzyć czas potrzebny backendowi na przygotowanie odpowiedzi oraz czas potrzebny przeglądarce na pobranie, wyrenderowanie i wykonanie kodu strony. Szybka odpowiedź serwera nie wyklucza problemów z dużą ilością JavaScriptu lub kosztownymi operacjami wykonywanymi po stronie użytkownika.
Kiedy warto zwiększyć zasoby serwera sklepu?
Gdy pomiary pokazują, że podczas normalnego ruchu sklep rzeczywiście wykorzystuje dostępne zasoby i to ich brak ogranicza wydajność. Zwiększenie CPU, RAM lub zasobów bazy danych może być wtedy normalnym elementem skalowania. Warto jednak wcześniej wykluczyć błędy, które powodują niepotrzebne zużycie tych zasobów.
Jak sprawdzić, czy optymalizacja sklepu zadziałała?
Po zmianach należy ponownie zmierzyć tę samą operację w podobnych warunkach i porównać wyniki. Trzeba również sprawdzić poprawność działania, liczbę błędów i zachowanie pod obciążeniem. Skrócenie czasu odpowiedzi nie jest poprawą, jeżeli jednocześnie pojawiają się nieaktualne dane albo problemy z realizacją zamówień.

Jacek Sultan

Technical Solutions Architect

CTO i współzałożyciel Dock. Na co dzień zajmuje się projektowaniem i rozwojem aplikacji webowych, architekturą systemów oraz infrastrukturą. Łączy techniczne podejście z perspektywą biznesową, skupiając się na rozwiązaniach, które są proste, niezawodne i mają konkretne uzasadnienie biznesowe. W technologii ceni przede wszystkim praktyczność. Dobre rozwiązanie powinno nie tylko działać, ale też przynosić wartość.

Porozmawiaj z nami