Profilovanie php. Profilovanie a ladenie PHP aplikácií pomocou xhprof a FirePHP


Niekedy môže ViewProfile.swf a ďalšie systémové chyby SWF súvisieť s problémami v registri Windows. Súbor ViewProfile.swf môže používať niekoľko programov, ale keď sa tieto programy odinštalujú alebo upravia, niekedy zostanú „osirotené“ (nesprávne) položky registra SWF.

V podstate to znamená, že aj keď sa skutočná cesta k súboru mohla zmeniť, jeho nesprávne predchádzajúce umiestnenie je stále zaznamenané v registri Windows. Keď sa Windows pokúša vyhľadať tieto nesprávne odkazy na súbory (umiestnenie súboru vo vašom PC), dôjde k chybe ViewProfile.swf. Okrem toho, napadnutie škodlivým softvérom mohlo poškodiť položky databázy Registry súvisiace s Bioshock 2. Preto je potrebné tieto poškodené položky databázy Registry SWF opraviť, aby sa problém vyriešil v koreni.

Ak nie ste servisný technik na počítače, neodporúča sa manuálna úprava registra Windows na odstránenie neplatných kľúčov ViewProfile.swf. Chyby pri úprave registra môžu spôsobiť nefunkčnosť vášho počítača a nenapraviteľné poškodenie operačného systému. V skutočnosti aj jedna čiarka umiestnená na nesprávnom mieste môže zabrániť spusteniu počítača!

Kvôli tomuto riziku odporúčame použiť dôveryhodný čistič registra, napr. WinThruster (vyvinutý certifikovaným partnerom Microsoft Gold), aby ste mohli preveriť a opraviť problémy s registrom súvisiace s ViewProfile.swf. Pomocou nástroja na čistenie registra môžete zautomatizovať proces hľadania poškodených položiek registra, chýbajúcich odkazov na súbory (ako je ten, ktorý spôsobuje chybu ViewProfile.swf) a nefunkčných odkazov v registri. Pred každým skenovaním sa automaticky vytvorí záložná kópia, ktorá vám umožní vrátiť všetky zmeny jedným kliknutím a ochráni vás pred možným poškodením vášho počítača. Najlepšie na tom je, že odstránenie chýb registra môže výrazne zvýšiť rýchlosť a výkon systému.


POZOR: Ak nie ste skúsený používateľ PC, NEODPORÚČAME manuálne upravovať register Windows. Nesprávne použitie Editora databázy Registry môže spôsobiť vážne problémy, ktoré môžu vyžadovať preinštalovanie systému Windows. Nezaručujeme, že problémy spôsobené nesprávnym použitím Editora databázy Registry sa dajú opraviť. Editor databázy Registry používate na vlastné riziko.

Pred manuálnou opravou registra Windowsu si musíte vytvoriť zálohu exportovaním časti registra súvisiaceho s ViewProfile.swf (napr. Bioshock 2):

  1. Kliknite na tlačidlo Začať.
  2. Zadajte " príkaz"V vyhľadávací panel... EŠTE NEKLIKNITE ENTER!
  3. Podržte stlačené klávesy CTRL-Shift na klávesnici stlačte ENTER.
  4. Zobrazí sa dialógové okno pre prístup.
  5. Kliknite Áno.
  6. Čierny rámček sa otvorí s blikajúcim kurzorom.
  7. Zadajte " regedit“ a stlačte ENTER.
  8. V Editore databázy Registry vyberte kľúč súvisiaci s ViewProfile.swf (napr. Bioshock 2), ktorý chcete zálohovať.
  9. Na jedálnom lístku Súbor vyberte Export.
  10. Na zozname Uložiť do Vyberte priečinok, do ktorého chcete uložiť kľúč zálohy Bioshock 2.
  11. V teréne Názov súboru Zadajte názov súboru zálohy, napríklad „Bioshock 2 backup“.
  12. Uistite sa, že pole Rozsah exportu zvolená hodnota Vybraná pobočka.
  13. Kliknite Uložiť.
  14. Súbor sa uloží s príponou .reg.
  15. Práve ste vytvorili zálohu položky registra súvisiacej s ViewProfile.swf.

Nasledujúce kroky na manuálnu úpravu registra nebudú v tomto článku popísané, pretože pravdepodobne poškodia váš systém. Ak by ste chceli viac informácií o manuálnej úprave registra, pozrite si odkazy nižšie.

Profilovanie aplikácií je zhromažďovanie údajov o rýchlosti vykonávania rôznych sekcií programu (súborov a funkcií). Existuje mnoho dostupných nástrojov na profilovanie PHP, ale nie všetky nástroje sú vhodné na vykonávanie analýzy priamo na výrobnom mieste.

XHProf a jeho vidlica Tideways je pohodlný a jednoduchý profilovač, ktorý dokáže efektívne zbierať štatistiky o fungovaní aplikácie takmer bez zníženia rýchlosti vašej aplikácie (alebo webu).

Prečo kód profilu?

Ak aplikácia začne pracovať pomaly (čítaj „stránka sa začala spomaľovať“), profilovanie vám umožní zistiť, ktorá časť je najpomalšia. Výsledkom profilovania je zvyčajne zoznam vykonaných funkcií spolu s časom ich vykonania.

Profilovanie kódu by malo byť na prvom mieste v procese optimalizácie aplikácie. Čokoľvek iné by boli dohady a s najväčšou pravdepodobnosťou nesprávne. Musíte vedieť, čo presne spôsobuje problémy a „brzdí“.

Profilovanie je postup na zhromažďovanie a organizovanie štatistík o čase vykonávania kódu. Toto nie je proces optimalizácie alebo úpravy programu. Výsledkom tohto procesu je zvyčajne rozšírená správa o programových komponentoch a štatistike výkonu funkcií.

Presne na to bolo vyvinuté riešenie XHProf. Je navrhnutý tak, aby fungoval na skutočných webových stránkach. Hlavnou myšlienkou tohto profilovača je vytvoriť minimálne zaťaženie aplikácie a zároveň zhromaždiť všetky potrebné údaje o rýchlosti prevádzky. Riešenie vyvinuli špecialisti z Facebooku.

Ako automaticky pripojiť php profiler?

Naši špecialisti tvrdo pracovali a tento proces úplne zautomatizovali.
Stačí sa prihlásiť, vybrať požadovanú doménu v záložke „Domény“, kliknúť na ikonu „PHP.INI + PHP Profiler“ a zaškrtnúť políčko „Domain Profiler“.

Aktivácia tejto funkcie môže chvíľu trvať, zvyčajne nie viac ako 10 minút.

Pre php verzie 5.2, 5.3, 5.4, 5.5, 5.6, 7.0 používame profiler XHProf, pre php verzie 7.1 a vyššie používame profiler Tideways.

Po povolení sa na každej stránke vašej lokality spracovanej pomocou PHP vloží do spodnej časti špeciálny blok s odkazmi na súbor s prehľadom (odkaz bude vyzerať asi takto:

Domain-name.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX&source=someapp)

A takto bude vyzerať súbor správy:

Tabuľka obsahuje zoznam funkcií, ktoré boli vykonané na jednej stránke s ďalšími informáciami:

  • Hovory – počet a percento volaní funkcií
  • Vrátane Wall Time - čas vykonania funkcie s vnorenými funkciami
  • Okrem Wall Time - čas vykonania funkcie bez vnorených funkcií
  • Vrátane CPU - čas procesora s vnorenými funkciami
  • Okrem CPU - čas procesora bez vnorených funkcií
  • Vrátane MemUse - spotreba pamäte s vnorenými funkciami
  • Okrem MemUse – spotreba pamäte bez vnorených funkcií
  • Vrátane PeakMemUse - maximálna spotreba pamäte s vnorenými funkciami
  • Okrem PeakMemUse - maximálna spotreba pamäte bez vnorených funkcií

Treba poznamenať, že správa vytvorená pomocou prílivových ciest sa môže od tejto správy vizuálne mierne líšiť, ale podstata sa nemení.

Grafické správy


Časti kódu náročné na zdroje sú zvýraznené žltou (stredná) a červenou (najťažšia). Toto sú tie časti kódu, ktoré využívajú veľa zdrojov v porovnaní so zvyškom programu. Môže to byť jedna pomalá funkcia alebo veľa volaní rýchlej funkcie. V našom príklade vidíme, že funkcia mysqli_multi_query() je označená červenou farbou, pretože beží najpomalšie.

Súhrnné prehľady

Rozhranie XHProf vám tiež umožňuje zobraziť súhrnné informácie z viacerých správ naraz. Za týmto účelom sa run_id predá oddelené čiarkami:

Domain-name.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX,YYYYYYYYYY&source=someapp

Technické vlastnosti

    Automatické zahrnutie profilera je implementované pomocou direktív auto_append_file a auto_prepend_file, ktoré spájajú dva spustiteľné súbory php:

    — auto_append_file inicializuje objekt zberu štatistík a spustí jeho prácu;

    — súbor auto_prepend_file dokončí zber štatistík a vygeneruje súbor správy so štatistikami (vo formáte JSON);

    Ak sa počas spustenia skriptu zavolá exit() alebo die(), súbor auto_prepend_file sa nevykoná. štatistický súbor sa nevygeneruje a blok s odkazmi na súbor správy nebude zahrnutý v spodnej časti stránky.

  1. Prístup na akúkoľvek stránku spracovanú pomocou php teda spustí vytvorenie nového súboru prehľadu, preto odporúčame vypnúť profiler po zhromaždení štatistík (zvyčajne niekoľko hodín), aby ste sa vyhli preplneniu diskovej kvóty, ktorá môže byť vyčerpaná po vygenerovaní veľké množstvo hlásení!
  2. Dôležité: Profiler bude fungovať iba vtedy, ak je stránka pripojená k serveru štandardnou cestou, automatickými prostriedkami (t. j. pomocou ovládacieho panela hostingu), v opačnom prípade budete musieť kontaktovať technickú podporu Hostland, aby ste nakonfigurovali profiler.
  3. V automatickom režime sa profilovač pripája iba k názvu hlavnej domény, profiler nie je automaticky pripojený k subdoménam.
  4. V automatickom režime profilovač zbiera štatistiky len pre skripty s príponou .php a .php5
  5. Po pripojení PHP profilera nie je možné zaručiť nepretržitú prevádzku stránky, preto ak stránka nefunguje správne, kým je profiler povolený, treba ho deaktivovať a profilovanie pokračovať iným spôsobom.

Poďme si to zhrnúť

Dúfame, že vám tento nástroj pomôže ešte viac zrýchliť vaše stránky na hostingu Hostland.

V článku boli čiastočne použité materiály od používateľa Den Golotyuk uverejneného na webovej stránke

Balakat Obsesslav. Suf. odvodené od balaka„butter(y)“, vytvorené postupne pomocou suf. -ak(a) od „rozhovor, klebetenie“ (z rovnakého kmeňa, ale so suf. -l-, as , cm.). Slová , loptičky(množné číslo) „rozhovor, klebetenie“ v nárečiach a iných slovan. Jazyk sú známe dodnes. Cm. .

Školský etymologický slovník ruského jazyka. Pôvod slov. - M.: Drop. N. M. Šansky, T. A. Bobrová. 2004 .

Pozrite sa, čo je „balakat“ v iných slovníkoch:

    bľabotať- hovoriť, chatovať, čmárať (Dal) Pozri... Slovník synonym

    STALK- BALKAK, ja bľakám, ty bľabotáš, nezrelý. (región). Chatujte, rozprávajte sa. Ushakovov vysvetľujúci slovník. D.N. Ušakov. 1935 1940 … Ušakovov vysvetľujúci slovník

    STALK- juh bľabotať Perm. rozprávať, rozprávať, rozprávať, čmárať. Balakanya St. klábosiť. Balakusha, balaka ob., južný, balyaka perm., balakar, chatterbox, hovorca. Balakar, buď šašo, žartuj ako úradní šašovia. Balakir muž, nižší, kazašský,... ... Dahlov vysvetľujúci slovník

    bľabotať- chatovať, rozprávať nezmysly, ukrajinsky. Balakati, blr. Balakat, poľština baɫakac. Bľabotať alebo bľabotať; pozri Bernecker 1, 40; Mi. EW 5. Ďalší stupeň striedania samohlások: ukrajinčina. skús zamrmlať, poľsky. beɫknąc – to isté, čes. blknúťi; St Šachmatov, ...... Etymologický slovník ruského jazyka od Maxa Vasmera

    Balakat- Nesov. trans. a neprerušovaný. rozklad Hovorte, chatujte. Efraimov výkladový slovník. T. F. Efremová. 2000... Moderný výkladový slovník ruského jazyka od Efremovej

    bľabotať- balakat, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balakal, balakala, balakalo, balakali, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka, balaka,... .. Formy slov

Ukázala, ako nainštalovať a nakonfigurovať xdebug, a pokryla niektoré základné funkcie, ako je zlepšenie výstupu funkcie var_dump() alebo tlač sledovania zásobníka hovorov pri prijatí chybovej správy. V druhej časti sme sa na túto funkciu xdebug pozreli ako na sledovanie. Sledovanie obsahuje všetky volania funkcií a metód v programe, čas spustenia, voliteľne veľkosť pamäte, odovzdané a vrátené parametre. Protokol sledovania vám môže pomôcť pochopiť cestu vykonávania zložitého programu. Namiesto vkladania ladiaceho kódu do programu zapínate alebo vypínate sledovanie tam, kde je to potrebné, a potom na analýzu súboru denníka použijete nástroje ako grep alebo svoje vlastné aplikácie PHP.

V tomto článku sa pozrieme na profilovanie. Profilovanie je na prvý pohľad podobné trasovaniu. Protokol profilovania nie je určený pre ľudí, nie je určený na vizualizáciu toku programu, ale poskytuje nám údaje na štatistickú analýzu bežiaceho programu.

Vytvorenie denníka profilovania

Nižšie je uvedený krátky úryvok z profilu profilovania vygenerovaného xdebugom:

fl=php:interné
fn=php::definovať
106 3

Fl=C:\www\drupal\includes\bootstrap.inc
fn=require_once::C:\www\drupal\includes\bootstrap.inc
1 648
cfn=php::definovať
hovory = 1 0 0
13 6
cfn=php::definovať
hovory = 1 0 0
18 4
cfn=php::definovať
hovory = 1 0 0
23 2


Ako vidíte, protokol profilovania sa nedá čítať priamo. Na vizualizáciu a analýzu získaných údajov použijeme ďalšie nástroje. Profilovanie teda ukazuje, koľkokrát bola konkrétna linka spustená a ako dlho spustenie trvalo.
Vytvorenie profilu profilovania značne znižuje výkon, podobne ako vytváranie protokolu sledovania, pretože je potrebné opísať prechod každého riadku. Preto, rovnako ako v prípade sledovania, nespúšťajte profilovanie na produkčných serveroch... Sú však prípady, keď je potrebné profilovanie spustiť na živom systéme. V tomto prípade buďte opatrní pri spúšťaní xdebug súčasne s inými rozšíreniami Zend, ako sú zavádzače, optimalizátory alebo vyrovnávacie pamäte.
Aby xdebug začal zaznamenávať protokoly profilovania, pridajte

Upozorňujeme, že profilovanie nemôžete spustiť pri spustení spustením príkazu.
Keďže protokol profilovania je určený na čítanie programami analyzátora, neexistujú žiadne ďalšie nastavenia, ktoré by vám umožnili zobraziť ďalšie informácie, ako je to v prípade protokolu sledovania. Existujú však niektoré nastavenia, ktoré vám umožňujú konfigurovať profilovanie, podobné tým, ktoré sme použili pri nastavovaní sledovania.
Po prvé, xdebug štandardne zapíše protokol profilovania do adresára /tmp. Ak používate Windows, musíte opraviť php.ini takto:
xdebug.profiler_output_dir="c:\traces"

V predvolenom nastavení xdebug prepíše existujúci protokol profilovania. Môžete ho nakonfigurovať tak, aby dopĺňal existujúci, pridaním nasledujúceho príkazu

v php.ini. Existujú prípady, keď nechcete vytvárať protokol profilovania pre všetky súbory, no zároveň je aktivácia profilovania za behu problematická. Namiesto pravidelného zapínania a vypínania profilovania pridajte príkaz
xdebug.profiler_enable_trigger=Zapnuté

v php.ini. Teraz môžete zapnúť a vypnúť profilovanie odoslaním špeciálneho parametra GET alebo POST XDEBUG_PROFILE do skriptu PHP. Toto povolí profilovanie iba pre tento skript PHP. Hodnotu tohto parametra nie je potrebné nastavovať, len nezabudnite tento parameter pridať na adresu test.php?XDEBUG_PROFILE.

Názov denníka profilovania

Názov, ktorý xdebug štandardne priraďuje profilu profilovania, je „cachegrind.out“. plus identifikátor procesu. Rovnako ako v prípade protokolu sledovania môžete zmeniť názvy protokolu pridaním príslušných nastavení do php.ini. Názov parametra xdebug.profiler_output_name. Argumentom je reťazec. ktoré môžu obsahovať rôzne modifikátory. Najdôležitejšie z nich sú nižšie:

  • %p – identifikátor procesu
  • %r – náhodné číslo
  • %u - čas
  • %H – hodnota $_SERVER["HTTP_HOST"]
  • %R – hodnota $_SERVER["REQUEST_URI"]
  • %s – názov vrátane celej cesty, lomky sa skonvertujú na podčiarkovníky
Upozorňujeme, že modifikátor %s sa používa iba pre xdebug.profiler_output_name. Ak chcete poznať názov profilu profilovania, môžete zavolať funkciu xdebug_get_profiler_filename().

Analýza profilovania denníka
Ako je uvedené vyššie, na analýzu protokolu profilovania sú potrebné ďalšie programy na vizualizáciu údajov. Všetky protokoly profilovania, ktoré xdebug vytvára, sú vo formáte podobnom formátu Cachegrind. Cachegrind je profilovač, ktorý je súčasťou výkonnejšieho programu Valgrind, programu na ladenie a profilovanie softvéru pre Linux. Cachegrind bol navrhnutý na analýzu štatistík vyrovnávacích pamätí, využitia pamäte a programových príkazov. Ďalší nástroj Valgrind, Callgrind, kreslí grafy hovorov. Čo sa týka PHP, môžeme túto aplikáciu použiť na vizualizáciu a analýzu protokolu profilovania.
Nástroj, ktorý sa bežne používa na analýzu protokolu profilovania generovaného xdebugom, sa nazýva . KCachegrind je slobodný softvér s licenciou GPL (funguje iba na systémoch Unix). Existuje však jednoduchý program pre Windows, ktorý je navyše zadarmo. Najprv sa pozrime na verziu systému Windows.

WinCacheGrind: analýza protokolov profilovania v systéme Windows

Aktuálna verzia (v čase písania tohto článku autorom tohto článku) WinCachegrind je 1.0.0.12. Táto verzia pochádza z roku 2005, čo znamená, že WinCachegrind nebol dlho vyvíjaný. Ak sa pozriete na poznámky k vydaniu, autori píšu, že program má chyby, kvôli ktorým sa niekedy správa čudne.
Preto odporúčam použiť KCachegrind, spustený na báze virtuálneho stroja na najnovšej linuxovej distribúcii, napríklad Ubuntu (poznámka prekladateľa, vo všeobecnosti zvláštne odporúčanie; v tomto prípade by som odporučil len nainštalovať Linux a neohradzovať sa záhrada virtuálnych strojov). V systéme Windows je k dispozícii obrovské množstvo virtuálnych strojov. Ak z nejakého dôvodu nie je možné použiť Unix alebo virtuálny stroj, môžete pokračovať v používaní WinCachegrind na jednoduchú analýzu protokolov profilovania. WinCachegrind na rozdiel od KCachegrind nekreslí grafy hovorov.
Inštalácia Wincachegrind je veľmi jednoduchá. Spustite inštalačný program, kliknutím na tlačidlo akceptujte licenciu a inštalácia je dokončená. Teraz môžete spustiť program a otvoriť jeden z protokolov profilovania cachegrind vytvorených xdebugom.

Kliknutím na hodiny alebo ikonu sigma môžete prepínať medzi zobrazením informácií v absolútnych hodnotách a percentách. Percentuálne zobrazenie ukazuje, koľko času v percentách z celkového času trvá volanie funkcie v danom bloku.
Dve užitočné nastavenia sú Profiler -> Skryť rýchle funkcie a Profiler -> Skryť funkcie knižnice. Prvý prepínač skrýva funkcie, ktorých časový príspevok k celkovému času vykonávania programu je nevýznamný.
Druhé nastavenie, Profiler -> Hide Library Functions, skryje funkcie zabudované do PHP zo všeobecnej analýzy. Keď sú obe tieto nastavenia povolené, uvidíte menej údajov, čo vám umožní zamerať sa na oblasti kódu, ktoré si vyžadujú optimalizáciu.
Hlavné okno obsahuje dve záložky: Riadok po riadku a Celkovo. Obe karty zobrazujú rovnaké informácie, ale karta Súhrnné informácie zhromažďuje pre lepšiu prezentáciu. Samočinný čas zobrazuje čas chodu kódu v aktuálnom bloku, zatiaľ čo Kumulatívny čas (Cum.) zobrazuje celkový čas chodu funkcií v danom bloku.

KCacheGrind: analýza profilovacích protokolov v Unixe

Unixová verzia KCachegrind poskytuje viac funkcií ako WinCachegrind. KCachegrind vizualizuje dáta a vytvára graf hovorov.
Ak ho chcete začať používať, musíte si nainštalovať KCachegrind. Aktuálna verzia . K dispozícii je novšia verzia (0.10.1), ktorá je však súčasťou balíka Valgrind.
Ak je to možné, na inštaláciu balíka KCachegrind použite správcu balíkov. KCachegrind používa GraphViz na kreslenie grafov hovorov, takže musíte nainštalovať aj balík GraphViz, ak váš správca balíkov automaticky neinštaluje závislé balíky.
Ak nenájdete binárny balík KCachegrind, budete si musieť KCachegrind skompilovať sami. Po stiahnutí zdrojov spustite

./configure --prefix=/opt/kde3
urobiť
vykonať inštaláciu

Ako si môžete všimnúť, musíte zadať cestu k aktuálnej inštalácii knižnice KDE. Ak neviete, kde sa vo vašom systéme nachádzajú knižnice KDE, použite

na zobrazenie cesty ku knižniciam KDE.
Po nainštalovaní môžete spustiť KCacheGrind z príkazového riadku

Tabuľkové zobrazenie údajov v KCachegrind je veľmi podobné WinCachegrindu. Môžete tiež prepínať medzi absolútnymi a percentuálnymi hodnotami. Niektoré funkcie KCachegrind nie sú navrhnuté pre PHP. Na obrázku nižšie je zobrazený graf volania programu phpMyAdmin:


Ako môžete vidieť, väčšina času spustenia bola strávená v common.inc.php. Nasledujúca snímka obrazovky zobrazuje vizualizáciu volaní funkcií v rámci common.inc.php:

Tento blok kódu beží dvakrát require_onces, čo je polovica času potrebného na spustenie common.inc.php. Dvojitým kliknutím na ľubovoľný obdĺžnik sa dostanete hlbšie do analýzy údajov.

Optimalizácia kódu na základe profilovacích údajov

Pred optimalizáciou vždy profilujte svoje aplikácie. S optimalizáciou môžete začať sami, na mieste, kde sa vám zdá, že táto optimalizácia prinesie efekt, no nie vždy je to pravda. Optimalizácia má vplyv najmä na tie časti, ktoré zaberajú najviac času v procese vykonávania.
Ak súčasne spúšťate veľa kópií programu, možno budete musieť optimalizovať tú časť vášho programu, ktorá zaberá väčšinu času vykonávania. V tomto prípade optimalizácia nezrýchli obsluhovanie jednej individuálnej požiadavky, ale umožní vášmu serveru zvládnuť vysoké zaťaženie a zároveň spotrebovať menej zdrojov na obsluhu týchto požiadaviek.
Pri pohľade na trvanie spustenia profilovača majte na pamäti, že absolútne hodnoty sú menej dôležité ako relatívne hodnoty. Namerané na rôznych systémoch sa absolútne hodnoty môžu líšiť. Avšak skôr, ako začnete optimalizovať svoj kód, zvážte nasledujúce veci.
Dôležitým pravidlom pri optimalizácii je zníženie počtu I/O operácií. Niektoré I/O operácie sú v porovnaní s výpočtami časovo veľmi náročné. Obmedzenie takýchto operácií môže byť veľmi efektívnym spôsobom, ako urýchliť váš program. Odstránenie jedného I/O volania môže poskytnúť efektívnejšie zlepšenie, ako stráviť veľa hodín optimalizáciou kódu. Preto by ste sa mali zamerať na I/O operácie skôr, ako začnete kódovať.
Pred optimalizáciou môžete tiež zvýšiť počet svojich serverov. Môžete si kúpiť obrovský, čo vám prinesie malé zvýšenie produktivity. Čas vývoja je drahší ako cena nového servera. A ak zvýšite množstvo hardvéru, môžete si byť istí, že zvýšenie získate okamžite bez akéhokoľvek dopadu na kód PHP. Keď vývojár strávi jeden alebo dva dni optimalizáciou kódu, nikdy nemôžete povedať, o koľko sa zvýši produktivita. A v konečnom dôsledku si už nemôžete byť istí, že optimalizácia neprinesie žiadne chyby.
Konverzia niektorých stránok na statické stránky je jedným zo spôsobov, ako dosiahnuť lepší výkon. Povedzme, že existuje stránka s vysokou návštevnosťou, kde skript PHP vytvorí prvú stránku pre každú požiadavku, pričom vyberie informácie z databázy alebo súboru XML. Ak sa údaje na stránke menia dostatočne často, môžete znova vytvoriť jej statickú kópiu. Ak pre stránku nie je možná konverzia na statické zobrazenie (na stránke sú zobrazené niektoré osobné informácie), môžete niektoré bloky previesť na statické zobrazenie.
Ďalšia úroveň optimalizácie nevyžaduje zmenu kódu PHP. Ako vieme, PHP je interpretovaný jazyk. To znamená, že jeho príkazy sú za behu preložené do medzikódu. Vysielanie sa opakuje pri každom spustení skriptu. Vďaka tomu je PHP pomalšie v porovnaní s jazykmi ako C alebo Java, ktoré nevyžadujú analýzu kódu pri každom spustení. Pre PHP môžete použiť medzipamäte reprezentácie (pozri môj preklad....) na uloženie a opätovné použitie prechodného kódu, čo zrýchľuje spustenie a vykonávanie.
To všetko neznamená, že toto nie je čas ani miesto na optimalizáciu PHP kódu. Niektoré optimalizácie kódu môžu výrazne zlepšiť výkon. Vždy si však pamätajte, že zmena kódu vždy prináša riziko zavedenia ďalších chýb a bezpečnostných problémov. Pamätajte tiež, že optimalizácia kódu znižuje jeho čitateľnosť.

Záver

Vytvorenie a vizualizácia profilovacieho logu je jednou z dôležitých podmienok optimalizácie PHP kódu. Musíte vedieť, ktoré miesta v programe vám zaberú najviac času a práve tam by ste mali začať s optimalizáciou.
V ďalšom článku sa pozrieme na ladenie pomocou xdebug. xdebug vám môže poskytnúť možnosť vzdialeného ladenia. Pomocou klienta, ktorý má túto schopnosť, ako je napríklad Eclipse PDT, môžete ladiť svoj kód bez toho, aby ste ho menili, nastavovať body prerušenia, preskakovať sekcie kódu a vidieť, ako a kde premenné menia hodnoty.

Posledná aktualizácia: 01/12/2019

Zverejnenie: 01.09.2016


Pomocou PhpStorm môžete analyzovať výkon vášho PHP kódu jeho profilovaním. Profilovanie vám umožní zhromažďovať štatistiky vykonávania programu: názvy vykonaných funkcií, koľkokrát bola vykonaná každá funkcia, čas vykonania každej funkcie, aké ďalšie funkcie boli volané v rámci každej funkcie atď.

Tieto informácie vám môžu poskytnúť rady o tom, kde je možné zlepšiť váš kód.

Pozrime sa, ako to funguje.

1. Predpoklady

PhpStorm IDE môže používať informácie o profilovaní zhromaždené pomocou nástroja Xdebug. Toto rozšírenie musí byť nainštalované a nakonfigurované vo vašom systéme. Ďalšie informácie nájdete v príručke inštalácie Xdebug.

Ak ste používateľom úžasnej platformy prenosného servera a softvérového prostredia Open Server, nemusíte robiť nič – rozšírenie Xdebug je už nainštalované a pripojené.

Pozornosť

Xdebug nie je kompatibilný s IonCube. IonCube je nástroj (utility) na ochranu softvéru napísaného v programovacom jazyku PHP. Zakážte rozšírenie IonCube úplne alebo počas používania Xdebug. Ďalším možným problémom môže byť, že Xdebug je štandardne nakonfigurovaný na porte 9000, čo je rovnaký port, aký používa Open Server. Ak chcete tento problém vyriešiť, v jednom z prípadov by ste mali zmeniť číslo portu.

Všetky tu opísané akcie boli reprodukované so správnymi očakávanými výsledkami v nasledujúcom technologickom prostredí:

2. Povolenie profilovača Xdebug

Profilovanie pridáva určitú réžiu k spusteniu aplikácie a generuje obrovské množstvo informácií o disku. Preto je najlepšie povoliť profilovač Xdebug iba v prípade potreby a za normálnych okolností ho vypnúť.

Xdebug sa konfiguruje pomocou direktív v aktívnom súbore php.ini. Vždy, keď povolíte profiler, musíte nakonfigurovať nasledujúcu direktívu:

xdebug.profiler_output_dir = /cesta/k/obchodu/snímky

Hodnota direktívy musí špecifikovať cestu, ktorá sa použije na uloženie profilovacích súborov.

2.1. Globálne

Ak chcete globálne povoliť profilovač Xdebug, musíte použiť nasledujúcu direktívu:

xdebug.profiler_enable = 1

Týmto spôsobom sa profilovanie vykoná pri každom spustení ľubovoľného skriptu. Túto možnosť je vhodné použiť na zapnutie profilovača len v ojedinelých prípadoch.

2.2. Použitie ďalších možností tlmočníka

Profiler môžete povoliť pomocou ďalších parametrov interpreta v okne Run/Debug Configurations. Na jej otvorenie použite nasledujúce položky v hlavnej ponuke IDE:

Možnosť (označená červeným obrysom na obrázku vyššie) Možnosti tlmočníka (možnosti tlmočníka) časť Príkazový riadok (príkazový riadok) by mala obsahovať nasledujúci riadok:

D xdebug.profiler_enable = 1

Táto možnosť vám umožní používať profilovač pre konkrétnu konfiguráciu a nie v globálnom meradle.

2.3. Pomocou špeciálnych parametrov GET/POST alebo súboru cookie

Na lepšie kontrolované profilovanie by sa mala použiť táto smernica:

xdebug.profiler_enable_trigger = 1

Ak je hodnota smernice nastavená na 1, potom pri spustení skriptu s parametrom GET/POST alebo súborom cookie s názvom XDEBUG_PROFILE sa profilovanie vykoná bez ohľadu na nastavenie xdebug.profiler_enable.

Táto možnosť aktivácie profilovača je najobľúbenejšia.

3. Zbierka protokolov profilovania

Ak chcete analyzovať protokoly profilovania, musíte ich najskôr zhromaždiť.

3.1. Zbierka protokolov profilovania pre webové aplikácie

Ak chcete profilovať webové aplikácie, použite profilovač Xdebug globálne alebo ho spustite a zastavte na požiadanie. Po zapnutí profilovača otvorte aplikáciu v prehliadači, aby ste mohli začať zbierať údaje – protokoly profilovania.

Pri analýze problémov s výkonom je použitie bookmarkletov alebo rozšírení prehliadača na ladenie veľmi dobrým prístupom, pretože vám umožňuje prechádzať aplikáciou a spustiť profilovač iba vtedy, keď sa zistí problém s výkonom. To vám umožňuje zbierať cielené protokoly profilovania.

3.2. Zbierka protokolov profilovania pre aplikácie CLI a testy jednotiek

Ak chcete profilovať aplikácie CLI a testy jednotiek, použite profilovač Xdebug globálne alebo vytvorte samostatnú konfiguráciu spustenia, aby ste profiler povolili pomocou okna Konfigurácie spustenia/ladenia. Potom spustite test aplikácie alebo jednotky CLI na zhromaždenie profilovacích údajov.

Pri analýze problémov s výkonom v testoch jednotiek je dobrým prístupom vytvoriť samostatnú konfiguráciu na spustenie iba tých testov jednotiek, pri ktorých existuje podozrenie, že majú problémy s výkonom. To vám umožňuje zbierať cielené protokoly profilovania.

4. Analýza popisu profilu profilovania

Pozrime sa bližšie na denník profilovania.

4.1. Otvorenie denníka profilovania

Ak chcete otvoriť protokol profilovania, použite nasledujúce položky v hlavnej ponuke IDE: .

Ak ste používateľom úžasnej prenosnej serverovej platformy Open Server, môžete tiež použiť multiplatformový nástroj Webgrind na zobrazenie denníka profilovania. Nájdete ho cez nasledujúce položky hlavnej ponuky Open Server [Pokročilé → PHP profiler].

Protokoly profilovania sa ukladajú do priečinka podľa nakonfigurovanej direktívy xdebug.profiler_output_dir. Vygenerovaný názov súboru vždy začína cachegrind.out. a končí buď PHP alebo ID procesu webového servera alebo hashom crc32 adresára, v ktorom sa nachádza profilovaný skript.


4.2. Štatistika vykonávania Tab

Na karte Štatistika vykonávania môžete preskúmať súhrnné informácie o metrikách vykonávania každej volanej funkcie. Môžete vidieť všetky súbory, volania funkcií, koľkokrát boli volané a čas vykonania (absolútny a relatívny) každej funkcie.

Horná mriežka zobrazuje rôzne metriky:

  • Vlastný čas – množstvo času, ktorý funkcia strávi vykonávaním svojho kódu (bez zohľadnenia volaní iných funkcií).

Spodná mriežka zobrazuje dve záložky: Callees – funkcie, ktoré tu skript volá, a Callers – odkiaľ bol skript volaný. Tu si môžete pozrieť rôzne metriky:

  • Čas – celkový čas vykonania.
  • Hovory - počet hovorov.

Funkcie s dlhým časom vykonávania alebo veľkým počtom volaní si určite vyžadujú testovanie.

4.3. Karta Strom hovorov

Karta Call Tree zobrazuje cesty vykonávania vášho kódu. Tu môžete vidieť podrobnejšie informácie o dobe vykonania každej funkcie atď.

Horná mriežka zobrazuje stromy hovorov (ktoré funkcie sa volajú v iných funkciách) a ďalšie metriky:

  • Volateľný (nazývaný súbor) – súbor, ktorý bol spustený.
  • Čas – celkový čas vykonania.
  • Hovory - počet hovorov.

Spodná mriežka zobrazuje dve záložky: Volaní – funkcie, ktoré sa tu volajú a Volajúci – odkiaľ je funkcia volaná. Tu si môžete pozrieť rôzne metriky:

  • Volateľná (volaná funkcia) – funkcia, ktorá bola vykonaná.
  • Čas – celkový čas vykonania.
  • Hovory - počet hovorov.

Kontrolné otázky

  1. Prečo sú PHP aplikácie profilované?
  2. Koľko hlavných spôsobov je možné povoliť profilovač Xdebug?
  3. Aký je najlepší spôsob, ako postupovať pri profilovaní aplikácií CLI a testoch jednotiek?
  4. Aké nástroje možno použiť na analýzu protokolov profilovania?
  5. Akým metrikám by ste pri analýze denníka profilovania mali venovať pozornosť ako prvé?

Publikácie na danú tému