2008-09-25 13 views
33

Chciałbym znaleźć sposób na określenie, jak długo każda funkcja w PHP, a każdy plik w PHP bierze do uruchomienia. Mam starszą starszą aplikację PHP, którą próbuję znaleźć w "surowych miejscach", dlatego chciałbym znaleźć obiektywnie, które procedury i strony zajmują bardzo dużo czasu.Profilowanie kodu PHP

Czy są jakieś gotowe narzędzia, które pozwalają na to, czy utknąłem przy użyciu mikrotomów i zbudowałem własną ramę profilowania?

+1

możliwe duplikat [Najprostszym sposobem profilu skrypt PHP] (http://stackoverflow.com/questions/21133/simplest-way-to-profile-a-php-script) –

Odpowiedz

42

W zeszłym tygodniu wykonałem kilka prac optymalizacyjnych. XDebug jest rzeczywiście drogą do zrobienia.

Po prostu włącz to jako rozszerzenie (z jakiegoś powodu nie działa z ze_extension na moim komputerze z systemem Windows), skonfiguruj plik php.ini za pomocą xdebug.profiler_enable_trigger = Włącz i zadzwoń do swoich normalnych adresów URL za pomocą XDEBUG_PROFILE = 1 jako albo get lub zmienna post do profilu tego żądania. Nic prostszego!

Mogę również polecić webgrind, webbased (php) google projekt Summer Of Code, który potrafi czytać i parsować pliki wyjściowe debugowania!

+0

Alternatywa dla webgrind na komputerach z systemem Windows: Wincachegrind (aplikacja komputerowa). –

6

zajrzyj do xdebug, która umożliwia szczegółowe profilowanie. I here's an explanation, jak korzystać z xdebug.

Xdebug za Profiler to potężne narzędzie który daje możliwość analizy kodu PHP i określenia zatorów lub ogólnie widzieć który fragmenty kodu są powolne i może użyć zwiększenie prędkości. Profiler w Xdebug 2 wyprowadza informacje profilowania w postaci pliku kompatybilnego z pamięcią podręczną .

Uznanie SchizoDuckie dla mentioningWebgrind. To jest pierwszy, o którym słyszałem. Bardzo przydatne (+1).

W przeciwnym razie można użyć kcachegrind dla systemu Linux lub jego mniejszej pochodnej wincachegrind. Obie aplikacje będą czytać pliki wyjściowe profilera xdebug i podsumowywać je dla przyjemności oglądania.

1

Jeśli zainstalujesz rozszerzenie xdebug, możesz je ustawić, aby wyeksportować profile uruchamiania, które możesz odczytać w WinCacheGrind (w systemie Windows). Nie pamiętam nazwy aplikacji czytającej pliki w systemie Linux.

3

Kiedyś widziałem odlew ekranowy dla Zend Core. Wygląda całkiem nieźle, ale to naprawdę kosztuje, nie wiem, czy to dla ciebie problem.

2

Funkcje profilowania xdebug są całkiem dobre. Jeśli chcesz zapisać wynik w formacie valgrind, możesz użyć programu podobnego do KCachegrind lub Wincachegrind, aby wyświetlić wykres wywołania, a jeśli jesteś osobą wizualną, łatwiej opracuj, co się dzieje.

3

XDebug jest przyjemny, ale nie jest łatwy w użyciu lub konfiguracji IMO.

Profiler wbudowany w Zend Studio jest bardzo łatwy w użyciu. Właśnie kliknąłeś przycisk na pasku narzędzi przeglądarki i masz swój profil kodowy. być może nie tak samo dokładnym jak wysypisko CacheGrind, ale zawsze było dla mnie wystarczająco dobre.

Musisz także skonfigurować platformę Zend, ale jest to proste i darmowe do użytku programistycznego - nadal jednak musisz zapłacić za licencję Zend Studio.

+3

Trzy i pół roku później, nie zgadzam się teraz ze sobą. Facebook ma otwarte narzędzie do profilowania o nazwie XHProf, które jest naprawdę ładne i lekkie oraz wystarczająco łatwe do skonfigurowania i uruchomienia. –

0

Najprostszym rozwiązaniem jest użycie Zend Profiler, nie potrzebujesz platformy Zend do użycia, możesz uruchomić ją bezpośrednio z przeglądarki, jest dość dokładna i ma większość funkcji, których potrzebujesz i jest zintegrowana w Zend Studio

2

Oprócz poważnych i potężnych możliwości debugowania w czasie rzeczywistym, PhpED z NuSphere (www.nusphere.com) ma wbudowany profiler, który można uruchomić za pomocą jednego kliknięcia z poziomu IDE.

7

Oto dobra wskazówka.

Podczas korzystania Xdebug do profilu Twojego PHP, skonfigurować profiler_trigger i wykorzystuje to w bookmarklet do uruchomienia profilera Xdebug;)

javascript:if(document.URL.indexOf('XDEBUG_PROFILE')<1){var%20sep=document.URL.indexOf('?');sep%20=%20(sep<1)?'?':'&';window.location.href=document.URL+sep+'XDEBUG_PROFILE';}