Xdebug nie pojedzie na produkcji.
Zmierzyliśmy, ile kosztuje.
Znasz ten układ: coś zwalnia na produkcji, lokalnie nie da się tego
odtworzyć, a profilera, którego masz, nie wolno tam włączyć. Więc sypiesz
microtime() po kodzie, czytasz slow query log i zgadujesz.
Dlaczego nie wolno go tam włączyć
xdebug.mode czyta się z php.ini przy starcie — to nie jest
przełącznik na jedno żądanie. „Włączę profiler na ten wolny koszyk" znaczy więc:
włączam go każdemu żądaniu na tym workerze, a potem restartuję PHP, żeby
wyłączyć.
Dokumentacja Xdebuga podaje jedną liczbę o narzucie: tryb off daje
„close to 0 overhead". O pozostałych trybach nie mówi nic. Więc zmierzyliśmy sami,
na prawdziwej stronie WordPress renderowanej w około 48 ms, i opublikowaliśmy
metodę razem z surowymi liczbami.
| bez żadnego narzędzia | 40 ms |
xdebug.mode=profile | 1012 ms — 25× wolniej |
| PHPRay, zapis każdego żądania | 40,7 ms — wobec 40,2 ms odniesienia |
Pięć przeplatanych serii. Rozrzut wyniku Xdebuga: 999–1034 ms, rozrzut odniesienia: 39,5–40,8 ms. Sześćdziesiąt żądań zapisało przy tym 1,2 GB plików cachegrind — około 40 MB na jedno profilowane żądanie. Na obciążonej stronie zapełni to dysk, zanim znajdziesz to jedno żądanie, którego szukasz.
Raport to prawdziwy wynik z działającego sklepu, z usuniętą nazwą strony. Nic nie instalujesz, nie zakładasz konta i nie podajesz adresu.
Co robi PHPRay zamiast tego
Zapisuje każde żądanie, cały czas, i to zostaje: czas, CPU, pamięć, odciski zapytań SQL z wyciętymi wartościami, wywołania HTTP na zewnątrz, błędy PHP i wzorce N+1. Otwierasz wczorajsze wolne żądanie, zamiast próbować je dziś odtworzyć.
Szczegółowa atrybucja per funkcja — czyli to, co najbardziej przypomina profiler Xdebuga — chodzi na próbce i kosztuje około 4% na tej samej stronie. Na mikroteście kosztowała 27% i ten wiersz też opublikowaliśmy, bo jest niewygodny.
# jedna linia, potem patrzysz, co się dzieje teraz curl -fsSL https://phpray.dev/install.sh -o phpray-install.sh less phpray-install.sh # pyta o roota, przeczytaj go wcześniej sudo bash phpray-install.sh && phpray top
Co zostaje przy Xdebugu
Nie udajemy, że zastępujemy go w całości — do tych rzeczy zostaw go u siebie:
- Debugowanie krokowe z punktami przerwania w edytorze. Nic w PHP nie robi tego lepiej.
- Pełny graf wywołań żądania, które umiesz odtworzyć lokalnie.
- Pokrycie kodu dla PHPUnit.
Obie rzeczy mogą stać na jednej maszynie: xdebug.mode=off na produkcji,
gdzie kosztuje prawie nic, a zapis zostawiasz PHPRayowi.
Zobacz najpierw, co z tego wychodzi
Zanim cokolwiek zainstalujesz: gotowy raport z prawdziwego sklepu WooCommerce — która wtyczka ile kosztuje na żądanie, które zapytania zjadają bazę, które żądania padły. Jeden plik HTML, bez konta.
Zobacz przykładowy raport → Panel na żywym ruchuZmierz to u siebie — wybierz, ile masz czasu
- Masz WordPressa? Pół minuty. Wtyczka to czysty PHP — bez
rozszerzenia, bez demona, bez roota, działa na współdzielonym.
Wgrywasz zip jak każdą inną wtyczkę i masz swoje żądania na liście.
Pobierz wtyczkę (0.1.9, 42 kB) jak ją podłączyć - Chcesz historię i wszystkie strony w jednym miejscu? Minuta.
Konto Free: jedna strona, bez karty, bez okresu próbnego, który się
kończy.
Załóż konto Free plany i ceny - Masz powłokę i roota? Jedna linia. Rozszerzenie C plus kolektor,
rdzeń na Apache-2.0, bez konta i bez karty.
Instalacja lokalna
Dalej
- Pełny pomiar z metodą i sprzętem (po angielsku).
- Ile kosztuje zapis każdego żądania — łącznie z 4%, których się nie spodziewaliśmy.
- Cennik — lokalny rdzeń za $0, Cloud opcjonalny.