Mange sider viser sidens loadtime i bunden af skærmen, og dette er da en meget sjov lille ting, men for brugeren ikke voldsom brugbar, da der er tale om PHPs eksekveringstid.
For udvikleren er dette dog ganske interessant, da man altid kan måle og optimere sin kode ud fra hvor hurtigt den eksekveres. PHP har selvfølgelig en indbygget funktion til dette, php:microtime .
php:microtime returnerer som standard to numre adskilt af komma (fx 0.37577400 122175750957800), hvoraf det første er mikrosekunder, og det andet er hele sekunder siden 1 Januar 1970 kl. 0 : 00 : 00 (år 0 i computerregning). Hvis vi kalder denne funktion i toppen af vores side og i bunden og trækker disse to tal fra hinanden får vi altså den præcise eksekveringstid for vores PHP script.
PHP 4 og PHP 5 eksempler
Funktionen kan bruges forskelligt afhængigt af om man kører med PHP 5 eller 4. Hvis man sender true med som parameter, laver PHP 5 returværdien om til et gyldigt timestamp, og så kan vi udregne tiden således:
1 2 3 4 5 6 7 8 9 10 11 |
<?php ##indsæt i toppen af dit dokument - henter nuværende tid $startTid = microtime(true); ## alt din kode her ##indsæt i bunden $slutTid=microtime(true); ##udskriv load tid echo 'Loadtid: '.($slutTid-$startTid).' sek.<br>'; ?> |
Dette er jo super nemt. Desværre skal man lige lave lidt krumspring når det gælder PHP 4, da denne ikke selv kan lave det gyldige timestamp. PHP manualen foreslår PHP 4 brugere bruger følgende funktion:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } ##indsæt i toppen af dit dokument - henter nuværende tid $startTid = microtime_float(); ## alt din kode her ##indsæt i bunden $slutTid=microtime_float(); ##udskriv load tid echo 'Loadtid: '.($slutTid-$startTid).' sek.<br>'; ?> |
Hvor vi før kaldte php:microtime direkte, kalder vi nu vores egen funktion som omdanner outputtet fra microtime.
Bonus
En anden god ting at optimere kode ud fra er ram forbruget, og igen har PHP indbygget funktioner til dette, nemlig php:memory_get_usage, som giver det nuværende ram forbrug i bytes, og php:memory-get-peak-usage som giver antal bytes dit script max har brugt.
Når jeg optimerer kalder jeg gerne php:memory_get_usage i toppen og php:memory_get_peak_usage i bunden af mit script (se eksempel herunder) – sammen med sidens loadtid er disse tal et rigtigt godt sted at starte når det kommer til optimering.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php ##hent nuværende ram forbrug i bytes echo 'Ramforbrug: '. memory_get_usage().'<br>'; ##indsæt i toppen af dit dokument - henter nuværende tid $startTid = microtime(true); ################ ##din kode her## ################ ##indsæt i bunden af dit dokument $slutTid=microtime(true); ## udskriv loadtid samt max ram forbrug echo 'Loadtid: '.($slutTid-$startTid).' sek.<br>Max Ramforbrug under eksekvering: '.memory_get_peak_usage(); ?> |
Endnu en brugbar ting fra dig Martin. Det kan jeg sagtens bruge til at optimerer mine php sites med. ty. Loadtiden er en god faktor til at måle hvor effektive mine kald og funktioner er
Link til seneste blogindlæg: Galvestons byplanlægning – en ægte SimCity by
Ja selvom det er utrolig simpel kode er det absolut noget man bør checke på alle sites, specielt når man arbejder på de lidt større sites.
Der har været en del der har skrevet og spurgt om jeg ikke ville gennemgå nogle af de funktioner jeg ofte bruger, så selvom det måske ikke lige er rocket science så kommer der nok en del af den her slags i fremtiden.
Du kan måske lave en miniguide i hvordan man laver et check på et filnavn. Og hvis filnavnet = true så udfør en handling. Ved godt det er ret simpelt, men en ting jeg tit må lede efter da PHP endnu ikke er på rygraden
Link til seneste blogindlæg: Galvestons byplanlægning – en ægte SimCity by
Tak for endnu et nyttigt tip, Martin.
Godt du kom igang med at blogge igen.
Link til seneste blogindlæg: Multimediedesigner
Nu er det godt nok et lidt gammel tip, men det gælder jo stadig
Kan man sige noget om hvornår man skal begynde at koncentrere sig om at optimere sin kode. Nu har jeg f.eks. lagt det ind på min side og forsiden tager f.eks. 0,00918 om at eksekvere. Men hvor “langsom” skal den være for at man skal begynde at kigge lidt nærmere på koden?
Det afhænger selvfølgelig meget af hvilken side det er man har, altså hvor meget kode der skal afvikles, men alligevel
Link til seneste blogindlæg: Danske split-test cases
@Jacob ja det må man sige, altid relevant at optimere.
Mht til hvornår der skal optimeres – så kommer det an på mange ting. En af de ting du kan evt prøve at lave en side hvor der er minimalt, altså lidt løkker, måske et kald til databasen osv, basis ting, dette tager du så en måling på – og så kan du bruge dette som din basis måling.
Jeg vil dog ikke mene at du har grund til optimering når du ligger på loadtider som på forsiden, så det kunne nok sagtens være en god basismåling. Til sammenligning kan jeg da sige min ligger på 0.5 sekund, hvilket er i overkanten, da det jo kun er servertid, så kommer der loadtid i browser osv også.
Link til seneste blogindlæg: Anmeldelse af Need for Speed Shift til Xbox 360