Segédletek.hu

Segédletek weblap szerkesztéshez!
ingyen letöltés

| Mind | PHP | HTML | CSS | Java |
|Legújabbak |Legtöbbször olvasottak|

A PHP és a profilkészítés, 2. rész:

Sorozat - A PHP és a profilkészítés:

A háromrészes cikksorozat második részében egy példa segítségével tekintjük át, hogy az Xdebug által elkészített profiladatokat miként értelmezhetjük a KCacheGrind-del.

3.2. Használat közben

Ha sikeresen elindult az Xdebug, megtaláljuk a phpinfo() listájában. Átnézhetjük a környezeti változók beállításait is; ha valami módosításra lenne szükség, az Xdebug doksija mindenben segít.
Ezek után, ha bármilyen kérést kiszolgálunk a helyi szerverrel, a profiladatok bekerülnek a naplóba, ami esetünkben a C:/ gyökérkönyvtárában helyezkedik el. A naplófájl neve cachegrind.out.1284 vagy ehhez hasonló. A naplózás könyvtárát természetesen úgy kell megválasztani, hogy jó sok hellyel (és írási joggal) rendelkezzünk benne, mert az összetettebb rendszerek tesztelése rengeteg adatot generálhat. A doksi.hu motorjának tesztelése például 300 MB-nál is több profiladatot eredményezett annak ellenére, hogy az ominózus teszt csak a felhasználók által elérhető, publikus részeket érintette, az adminisztrációs felületet és a karbantartási funkciókat egyáltalán nem.

Megjegyzés: mivel korábban engedélyeztük az automatikus profilkészítést, a naplózás folyamatos lesz. Ne felejtsük kikapcsolni fejlesztés közben (pontosvessző az extension-ös sor elé, majd a szerver újraindítása), különben a lassulás érzékelhető lesz, s a világ összes kapacitása sem bizonyul majd elegendőnek a naplófájlok tárolásához.

A profiladatok előállításának legegyszerűbb módja, ha a helyi szerverünkön futó weboldal minden tesztelni kívánt részét szépen végigkattintgatjuk, de használhatunk ún. load-tester alkalmazásokat is, amelyek virtuális felhasználókkal terhelik a szervert, jobban kihangsúlyozva ezzel a gyengeségeket. A cikk végén egy ilyen használatát is látni fogjuk.

Lássuk tehát, hogyan is kell használni élesben: a szemléltetés kedvéért tekintsünk egy kódot (profiler_for.php). Ez 20-szor nézi meg, hogy 1 és 1.000 között hány darab kettővel osztható szám található. Egy függvénnyel ellenőrzi az oszthatóságot, és képernyőre is ír.
function Writeln($line) {
        echo "<p>$line</p>\n";
}

function IsGood($num) {
        if ( ($num % 2) == 0 ) {
                return true;
        } else {
                return false;
        }
}

function CountThem($from, $to) {
        $count = 0;
        // A megadott küszöbértékek között keressük a páros számokat
        for ($i = $from; $i <= $to; $i++) {
                // Ha kettővel osztva nem ad maradékot, akkor páros
                if (IsGood($i)) {
                    $count++;
                        Writeln($count);
                } else {
                        Writeln('Nem osztható.');
                }
        }
}
// Meghívjuk 100-szor a függvényt
for ($i = 1; $i <= 20; $i++) {
        // Százezer-ig nézzük
        CountThem(1, 1000);
}
Mielőtt lefuttatnánk, ne felejtsük törölni a cachegrind naplófájlt, hogy tiszta lappal indulhassunk.
Futtatáskor egy kis számolgatás, majd a profiladatok előállnak, egy 3,5 MB-os fájl képében: C:\cachegrind.out.1284
Mint említettem, az elemzéshez a KCacheGrind alkalmazást használjuk, ami minden KDE felületet használó Linuxban megtalálható. Nekem egy VMWare alatt futó OpenSUSE van kéznél, ezért csak a naplófájlt kell átmásolnom a virtuális gépbe, majd elindítani az elemzőprogramot.

1. A KCacheGrind felhasználói felülete

A KCacheGrind alkalmazásban a Nézet menüben állíthatjuk be, hogy az eredményeket milyen formában szeretnénk látni. Az első lehetőség a Relatív költségek megjelenítése ? ekkor az adott szkript teljes futási idejéhez viszonyítva adja meg százalékban az egyes függvények erőforrásigényét. Ha az Abszolút költségek megjelenítése módot választjuk, akkor egy olyan számot kapunk, amivel az egyes eljárások erőforrásigénye hasonlítható össze abszolút módon, így a többszöri tesztelés során láthatjuk, hogy a kód módosításával merre sikerült elmozdulnunk. A Szülőhöz rendelt relatív százalék opcióval a hívóhoz képest határozhatjuk meg az erőforrásigényt.
A példában az Abszolút költségek megjelenítése módot használjuk.

2. A profiler_for.php szkript adatai

Középen kiválasztjuk, hogy forrásfájl szerint rendezve akarjuk látni az adatokat, majd az egyetlen fájlra állunk: a profiler_for.php-re. Ekkor az alatta látható dobozban megjelennek azok a függvények, amelyeket meghívtunk ebből a fájlból, költség szerint csökkenő sorrendbe rendezve. Leolvasható, hogy a futás során a CountThem eljárás hatalmas részt hasít ki magának az összes költségből. Kattintsunk is rá, majd figyeljünk fel a tőle jobbra található dobozra, ahol megjelenik, hogy kedvenc eljárásunk a Writeln és az IsGood eljárást is hívogatja, méghozzá 20.000-szer! A középső listában azt is látjuk, hogy a Writeln eljárás is erőforrásigényes, de az IsGood a legkevésbé.

Hiába a bugyuta példa, vélhetően nem igényel több magyarázatot a KCacheGrind használata.

A cikksorozat következő, s egyben befejező részében megvizsgáljuk az általánosan felismerhető optimalizálási lehetőségeket, illetve vetünk egy pillantást a reprodukálható terheléses tesztek világára is.

Írta: UFO - 2007-07-25 22:23:11

* Nem vagy bejelentkezve!
* Nem töltheted le a segédlet forrását egyben!
* Nem szavazhatsz a segédletre!
* Nem írhatsz a segédlethez tartozó fórum témába!


Banki hitelt keres?
K&H forint és euró alapú hitelek díjelengedési akcióval. Részletek:
www.kh.hu

OTP Lakáshitel
Sürgősen költözne? Akciós OTP lakáshitelek
OTPBank.hu

Játsszon a Knorr-ral
Gyűjtse a vonalkódokat és nyerjen a Knorr Rafinériával! Részletek:
www.rafineria.hu

F1 játék, értékes nyeremények
Változtass a csapat összetételén, és nyerd meg a bajnoki címet 2010-ben.
f1liga.hu

Andante ülőbútorok
Minden igényt kielégítő, Feng Shui értékeit mutató garnitúrák
www.andante.hu

Hirdessen itt