Profiler
Zastávám názor, že už při psaní kódu bychom měli mít na paměti rychlost jeho vykonávání. Samozřejmě by to nemělo být v rozporu s kvalitou kódu, ale naopak v souladu s ní – vyhýbat se zbytečně složitým konstrukcím a vytvářet elegantní kód, který se bude nejen dobře spravovat, ale zároveň i rychle vykonávat. Pokud však na rychlost vykonávání kódu při psaní nemyslíme, nebo pokud je i přes to kód pomalý, přichází ke slovu profiler. Ten nám řekne, kde naše aplikace tráví nejvíce času.
Pro PHP je k dispozici profilerů několik, některé jsou přímo součástí vývojových prostředí, já mám dobrou zkušenost s rozšířením APD, což je rozšíření přímo do Zend enginu, v php.ini
se tedy aktivuje direktivou zend_extension_ts = C:/PHP/ext/php_apd.dll
nebo podobnou. Poté stačí v okamžiku, kdy chceme zahájit profilování, zavolat funkci apd_set_pprof_trace, čímž vznikne soubor, který lze následně analyzovat třeba skriptem pprofp
. Výstup potom vypadá např. takto:
%Time | Real | User | System | Calls | secs/call | summ s/call | Name | |||
---|---|---|---|---|---|---|---|---|---|---|
excl | cumm | excl | cumm | excl | cumm | |||||
33.3 | 0.02 | 0.02 | 0.02 | 0.02 | 0.00 | 0.00 | 7 | 0.0029 | 0.00 | require_once |
33.3 | 0.01 | 0.01 | 0.02 | 0.02 | 0.00 | 0.00 | 55 | 0.0004 | 0.00 | sprintf |
33.3 | 0.00 | 0.00 | 0.02 | 0.02 | 0.00 | 0.00 | 144 | 0.0001 | 0.00 | feof |
Z tohoto výstupu se dá následně poznat, ve kterých funkcích skript tráví nejvíce času, a na tato místa se následně zaměřit.
Dobrou alternativou je Xdebug spolu s WinCacheGrind nebo KCachegrind.
U většiny webových aplikací problém nicméně není v rychlosti PHP kódu, ale v práci s databází. Té můžeme nejlépe pomoci správným návrhem indexů.
Přijďte si o tomto tématu popovídat na školení Výkonnost webových aplikací.
Diskuse
error414:
ja mam nejlepsi zkusenosti s xdebugem, ten obsahuje i docela dobry profiler, ve verzi 2 uz i nejak pocita s pameti, ale to nemam prostudovane.
http://www.error414.com/clanek_263.html
Farin:
Take muzu potvrdit dobre zkusenosti s xdebugem.Navic ve spojeni napr s KCachegridnem umi generovat moc pekny graficky vystupy.
spaze:
Ještě je (bylo) třeba nastavit dumpdir, z mého php.ini:
[APD]
; Do not include trailing slash, you'll get "no dumpdir specified" error.
apd.dumpdir = "C:/Program Files/PHP/Traces"

černoch:
Tak jsem vymýšlel jak nainstalovat APD na linux server, když v ubuntu je jenom pro verzi 4 "apt-cache search apd php" a při úspěšném pokusu o nainstalování aspoň xdebug "pecl install xdebug-beta" (http://xdebug.org/install.php) jsem zjistil, že stejně musí jít nainstalovat i APD "pecl install apd" (dál jsem to nezkoušel, protože zkouším ten xdebug-beta). Jinak pro tyhle příkazy (pecl, pear) hádám bude potřeba mít nainstalový PEAR a dev "apt-get install php-pear php5-dev".error414:
na xdebug staci stahnout zdrojove kody, zkompilovat. Vytvori se php modul a ten po te pridat do php.ini. Mam to vyskousene na ubuntu, gentoo a archu.
Diskuse je zrušena z důvodu spamu.

