
Pri vytváraní komplexných a zložitých aplikácií sa môže veľmi často hodiť nástroj, pomocou ktorého je možné identifikovať časti, ktoré využívajú veľa systémových prostriedkov, alebo sa vykonávajú príliš dlho. Tieto úlohy dokáže riešiť práve profiler.
Pri programovaní väčšinou ľudia rozmýšľajú nad problémom, ktorý riešia. Preto často nastáva situácia, že vzniknutý modul alebo jeho časť nefunguje dostatočne rýchlo a je nutné ho optimalizovať. Samozrejme, dá sa na namietať, že programátor, ktorý modul naprogramoval neefektívne, nie je dobrý programátor. Nemyslím si však, že to musí byť vždy pravda. Často je možné naprogramovať veľmi pekné riešenie problému, ktoré rieši daný problém veľmi elegantne a pomerne priamočiaro, avšak vzhľadom na implementáciu PHP alebo ďalších pridruženým technológiám, to nie je v praxi použiteľné. Preto treba vždy hľadať vhodný kompromis medzi optimalizáciou a “priamočiarosťou” a “eleganciou” riešenia problému.
Dnes už existuje viacero PHP Profilerov. Je možné použiť XDebug a následne jeho výstupy analyzovať pomocou niektorého z viacerých dostupných nástrojov (napríklad KCacheGrind). Doteraz sa mne osobne najviac pozdával profiler, ktorý bol súčasťou Zend Servera. Fungoval pomerne jednoducho, avšak nefungoval mi na veľkých projektov dobre. Flash aplikácia pri veľkých dátach a hlbokých vnoreniach funkcií prestávala fungovať a padala na použití pamäte a iných limitoch. Ďalšou nevýhodou je, že tento profiler nie je zadarmo a je v platenej verzii Zend Servera. Takže som hľadal alternatívu a našiel som profiler, ktorý mi vyhovuje a poskytuje informácie, ktoré ma zaujímajú. Ide o profiler vytvorený vo Facebooku, ktorý sa volá XHProf.
Profiler XHProf je v podstate jednoduchým modulom do PHP spolu s ďalšími PHP skriptami pre zobrazovanie výsledkov. Stačí ho stiahnuť a zapnúť. Následne sa všetko profilovanie deje v rámci aplikácie a plne pod jej kontrolou. Profiler je možné v aplikácií kedykoľvek zapnúť a kedykoľvek vypnúť. Profiler ako taký generuje na konci výstup ktorý, je možné analyzovať a zobrazovať priamo skriptami, ktoré sú pridružené v balíčku s profilerom, alebo je možné si naprogramovať aj nejaké vlastné zobrazovacie skripty, ktoré sa môžu zameriavať na špecifické veci podľa potreby.
Celým výstupom profileru je dá sa povedať tabuľka s funkciami. V tejto tabuľke je možné sledovať základne ukazovatele:
- Počet volaní funkcie
- Čas behu funkcie (samostatný aj s vnorenými funkciami)
- Využitie pamäte (samostatne aj s vnorenými funkciami)
- Využitie CPU (samostatne aj s vnorenými funkciami)
Podľa týchto hodnôt je možné dané funkcie zoraďovať, čiže veľmi ľahko je možné identifikovať, ktoré funkcie sú tie, ktoré požierajú najviac času a systémových prostriedkov. Pri profilovaní je možné vypnúť profilovanie natívnych php funkcii, čo umožní sústrediť sa na funkcie v danej aplikácií.
XHProf obsahuje 3 veľmi užitočné vlastnosti:
- Možnosť nakresliť graf z výsledkov – graf zobrazuje celý beh aplikácie a zvláda vskutku aj pomerne zložité aplikácie (minimálne TYPO3 ide v pohode). Veľkosť jednotlivých uzlov v grafe je zobrazená podľa dĺžky ich trvania. Rovnako červenou farbou sú zvýraznené metódy, ktoré trvajú dlho.
- Vybranie konkrétnej funkcie – vybraním funkcie je možné sledovať všetky čísla v jej kontexte, vidieť, ktoré funkcie ju vyvolajú a koľkokrát, aké funkcie sú volané z vybranej funkcie. Tiež je možné nakresliť graf pre túto podmnožinu funkcii.
- Porovnávanie výsledkov – každý výstup z profilera je uložený ako samostatný súbor na disku. Jednotlivé výsledky je možné zobraziť naraz a pozorovať zmeny. Vďaka tomu, je možné hneď vidieť pomocou farebného zobrazenia, ktoré čísla sa zlepšili alebo zhoršili, čo je veľmi výhodné po zapracovaní optimalizačných úprav a vidieť tak reálnu zmenu, ktorú zmeny spôsobili.
Využitie profilera sa mi osvedčilo hlavne na serveroch. Vzhľadom na to, že ho je možné integrovať priamo do aplikácie, je možné nastaviť proces profilovania tak, že po pridaní špeciálneho getového parametra alebo po nastavení špeciálnej cookie v prehliadači sa aktuálny beh stránky zbehne profilerom. Odkaz na tieto výsledky sa následne vloží na stránku a takto sa zabezpečí bezproblémové profilovanie aktuálne bežiacej aplikácie. Akonáhle sa vyskytne nejaký problém, alebo niečo beží dlhšie ako by malo, stačí pridať prepínač a v pohodlí prehliadača sa pozrieť na to, čo sa vo vnútri na serveri deje.
Profiler XHProf má asi iba jednu nevýhodu a tou je, že beží len pod 64 bitovým linuxom, čo je dá sa povedať štandard pre všetky veci vyvíjané vo Facebooku (ako napr. aj HipHop, ktorý ide tiež len pod 64 bit linuxom). Inak je to naozaj veľmi dobrý pomocník a pri vhodnom nastavení na serveroch, kde sa testujú aplikácie alebo aj reálne bežia je užitočnou pomôckou, ktorá dokáže ušetriť veľa času.

Ahoj. Ake mas s nim skusenosti? Ja by som potreboval zistit, ktore DB query mi spomaluje chod stranky. Vopred vdaka za tip
Ahoj, mam s nim dobre skusenosti
ked ale hladas query ktora ti spomaluje web skus v prvom rade pozriet mysql slow log, pravdepodobne to tam najdes
ak nie tak potom ak mas aplikaciu naprogramovanu tak ze query do db robis z 1 miesta tak si tam pridaj meranie kolko trva kazda query a najdes hu asi hned, ak ani to neide a requestujes mysql z aplikacie priamo na vela miestach tak skus zapnut na mysql full logovanie vsetkych query a potom si ich rad radom prejdi cez “describe query” v mysqlku