Skrypt PHP do pomiaru szybkości działa wolno: przyczyny i sposoby diagnozy

Wyjaśniamy, dlaczego skrypt PHP do pomiaru szybkości daje niestabilne wyniki, jak rozpoznać źródło problemu oraz poprawić pomiar downloadu, uploadu i opóźnień.

Opublikowano 2026-09-10 Ostatnio zaktualizowano 2026-09-10 Kategoria: Przewodniki

Skrypt PHP do pomiaru szybkości może pokazywać niższy transfer, zawyżone opóźnienie albo różne wyniki przy kolejnych próbach. Nie zawsze oznacza to problem z łączem operatora. Na rezultat wpływają między innymi konfiguracja serwera, sposób przesyłania danych, obciążenie sieci, router, Wi-Fi oraz ograniczenia środowiska PHP.

Rzetelna diagnoza wymaga oddzielenia problemów aplikacji od problemów lokalnej sieci. Warto porównać wynik skryptu z pomiarem wykonanym w przeglądarce oraz sprawdzić osobno pobieranie, wysyłanie, opóźnienie, jitter i utratę pakietów.

Jak rozpoznać nieprawidłowy wynik pomiaru

Objawem błędu może być stałe zaniżenie prędkości względem parametrów łącza, duża różnica między testem po kablu Ethernet a Wi-Fi albo wynik, który rośnie dopiero po dłuższym czasie. Niepokojące są również nagłe przerwania transferu, zerowa prędkość uploadu i duże wahania opóźnienia.

Najpierw wykonaj kilka pomiarów o różnych porach. Testuj komputer podłączony bezpośrednio do routera, zamknij aplikacje korzystające z internetu i porównaj rezultat z innym narzędziem. Jeżeli tylko skrypt PHP pokazuje błędne dane, przyczyny należy szukać w aplikacji lub serwerze.

Ograniczenia serwera i środowiska PHP

Skrypt może działać na hostingu współdzielonym, którego procesor, pamięć lub przepustowość są dzielone z innymi stronami. Gdy serwer jest obciążony, czas rozpoczęcia transferu rośnie, a pomiar downloadu może nie wykorzystać możliwości łącza klienta.

Limity PHP, takie jak max_execution_time, ograniczenia pamięci oraz limity procesów, mogą przerwać dłuższy test. Sprawdź logi serwera, czas wykonania żądania i obciążenie CPU. Warto także potwierdzić, czy hosting nie nakłada limitu przepustowości dla dużych plików.

Nieprawidłowy sposób pomiaru downloadu

Częstym błędem jest generowanie danych w PHP podczas każdego żądania zamiast przesyłania gotowego pliku testowego. Tworzenie losowych danych obciąża procesor i może stać się wąskim gardłem, szczególnie przy większych rozmiarach pliku.

Do testu pobierania użyj pliku o znanym rozmiarze, wyłącz kompresję dla danych losowych i mierz czas od faktycznego rozpoczęcia odbioru do zakończenia transferu. Wynik obliczaj na podstawie liczby przesłanych bajtów i czasu, a nie na podstawie czasu generowania odpowiedzi.

Błędy pomiaru uploadu

Upload bywa zaniżony, gdy skrypt odczytuje dane wejściowe dopiero po ich pełnym zapisaniu lub gdy limit upload_max_filesize blokuje większy plik. Dodatkowe operacje dyskowe, filtrowanie danych i skanowanie antywirusowe również zwiększają czas żądania.

Sprawdź rozmiar żądania, nagłówki HTTP, czas odbioru danych oraz rezultat zapisu. Dla testu przepustowości zapisuj dane do szybkiego bufora albo pomijaj trwały zapis, jeśli aplikacja nie musi przechowywać pliku. Test powinien jasno rozdzielać czas transmisji od czasu przetwarzania.

Wpływ protokołu HTTP i konfiguracji serwera

Nieoptymalna konfiguracja Apache, Nginx lub PHP-FPM może ograniczać liczbę równoczesnych połączeń. Buforowanie, kompresja gzip, proxy oraz CDN mogą zmieniać sposób przesyłania danych i sprawiać, że mierzony jest cache zamiast rzeczywistego transferu.

Sprawdź nagłówki Cache-Control, Content-Length i Content-Encoding. Użyj unikalnego parametru zapytania tylko wtedy, gdy chcesz ominąć cache. Dla danych testowych ustaw odpowiedni typ treści i upewnij się, że serwer nie zmienia rozmiaru odpowiedzi przez kompresję.

Router, Wi-Fi i zakłócenia radiowe

Wynik skryptu nie opisuje wyłącznie serwera. Słaby sygnał Wi-Fi, zatłoczony kanał radiowy, odległość od routera oraz praca w paśmie 2,4 GHz mogą ograniczać download i upload. Problem może nasilać się, gdy inne urządzenia przesyłają dane.

Powtórz test przez kabel Ethernet, a następnie porównaj pasma 2,4 GHz i 5 GHz. Sprawdź firmware routera, obciążenie sieci domowej i jakość połączenia między modemem a routerem. W przypadku światłowodu, kabla lub DSL warto również sprawdzić parametry synchronizacji i błędy na urządzeniu operatora.

Opóźnienie, jitter i utrata pakietów

Prędkość transferu może wyglądać poprawnie, mimo że połączenie jest niestabilne. Wysokie opóźnienie wydłuża rozpoczęcie transmisji, jitter powoduje nierówny przepływ danych, a utrata pakietów wymusza retransmisję. Te objawy są szczególnie widoczne podczas wideokonferencji, gier i wysyłania wielu małych żądań.

Wykonaj serię żądań do serwera testowego i zapisz medianę oraz wartości skrajne. Porównaj ping po kablu i przez Wi-Fi, sprawdź trasę do serwera oraz obserwuj utratę pakietów. Pojedynczy pomiar nie wystarcza do oceny jakości łącza.

Jak zoptymalizować skrypt PHP do pomiaru szybkości

  1. Przesyłaj gotowe pliki testowe o kilku rozmiarach, zamiast generować duże dane w każdym żądaniu.
  2. Mierz czas monotonicznym zegarem, na przykład funkcją hrtime, aby uniknąć wpływu zmiany czasu systemowego.
  3. Rozdziel test downloadu, uploadu i opóźnienia oraz zapisuj rozmiar danych i czas każdej próby.
  4. Wyłącz niepotrzebne logowanie, zapisy do bazy i operacje dyskowe wykonywane w trakcie pomiaru.
  5. Wykonaj kilka próbek i prezentuj medianę, minimum oraz maksimum zamiast jednego wyniku.
  6. Użyj serwera testowego możliwie blisko użytkownika, ale zaznacz jego lokalizację i operatora infrastruktury.

Praktyczna kolejność diagnozy

Najpierw sprawdź test na kablu i porównaj go z niezależnym narzędziem. Następnie zweryfikuj logi PHP, czas odpowiedzi HTTP, limity hostingu oraz nagłówki cache. Kolejny etap to test z innym plikiem i innym serwerem. Dopiero po wykluczeniu aplikacji analizuj router, Wi-Fi i parametry łącza operatora.

W dokumentacji zapisuj datę, typ połączenia, lokalizację serwera, rozmiar pliku, prędkość pobierania i wysyłania, opóźnienie, jitter oraz utratę pakietów. Taki zestaw danych ułatwia rozróżnienie stałego ograniczenia od chwilowego przeciążenia.

Do porównania wyników można wykorzystać niezależny test szybkości internetu, pamiętając, że różne serwery i metody pomiaru mogą dawać odmienne rezultaty.