Home
Contact
Over Open-T
Open Source

Web Tip #2 - Benchmark en optimaliseer uw site!

Benchmark en optimaliseer uw site!

Het is heel belangrijk dat uw site altijd vlot reageert. Een bezoeker zal snel afhaken als een site te traag is. Daarom is het belangrijk uw site te benchmarken, en vervolgens te optimaliseren.

Bij de Apache webserver wordt een benchmark programma ab (voor apache2 ab2) geleverd dat een prima indruk kan geven van de prestaties van uw site.

Het commando:
ab -c 10 -n 100 http://www.uwsite.nl/index.php
genereert 100 requests op www.uwsite.nl en doet dit door 10 verbindingen gelijktijdig te starten. De output van dit commando ziet er dan bijvoorbeeld zo uit:
# ab2 -n 100 -c 10 http://www.uwsite.nl/index.php This is ApacheBench, Version 2.0.40-dev <$Revision: 1.121.2.8 $> apache-2.0 Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/ Benchmarking www.uwsite.nl (be patient).....done Server Software: Apache/2.0.49 Server Hostname: www.uwsite.nl Server Port: 80 Document Path: /index.php Document Length: 11020 bytes Concurrency Level: 10 Time taken for tests: 9.694700 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 1145700 bytes HTML transferred: 1102000 bytes Requests per second: 10.31 [#/sec] (mean) Time per request: 969.470 [ms] (mean) Time per request: 96.947 [ms] (mean, across all concurrent requests) Transfer rate: 115.32 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 18 63.2 0 309 Processing: 394 908 109.0 939 966 Waiting: 293 891 118.2 925 951 Total: 401 926 93.0 941 1242 Percentage of the requests served within a certain time (ms) 50% 941 66% 945 75% 947 80% 949 90% 953 95% 966 98% 1147 99% 1242 100% 1242 (longest request)
Dit betekent dat in deze simulatie een bezoeker minstens 0.941 seconde en maximaal 1.242 seconde moest wachten.
Na het benchmarken wilt u waarschijnlijk nog het een en ander verbeteren of nazien. Om dit gericht te kunnen doen heeft u meer nodig dan alleen een totaalbenchmark. Gelukkig zijn er PHP functies die helpen met het krijgen van een inzicht in de tijdsbesteding. De functie microtime() geeft 'precision timer' tijd in een enigszins onhandig formaat. We hebben een hulpfunctie nodig om een 'normaal' getal in seconden te krijgen. Dat ziet er dan als volgt uit: function getMicroTime(){ list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } $starttime=getMicroTime(); for ($i=0;$i<10000;$i++){ $test+=1; } $endtime=getMicroTime(); $elapsed=$endtime-$starttime; echo "\nThe starttime was: $starttime"; echo "\nThe endtime was: $endtime"; echo "\nThe elapsed time was: $elapsed"; Door op strategische plaatsen de getMicroTime() waarde te onthouden kunnen we precies bepalen welk programmadelen het langst duren.
Enkele tips voor het optimaliseren:
  • Laat ab2 op een andere computer lopen dan die waar de webserver draait. Anders vertekenen de benchmark gegevens omdat ab2 en apache om de processortijd 'vechten'. Bij het bekijken van een complexe pagina met een browser doet zich hetzelfde probleem voor. Als u echt niet anders kunt draai dan de benchmark tool of de browser met een lage prioriteit (in Linux 'nice' voor het commando zetten).
  • PHP is een interpreter. Laat de interpreter geen code lezen die nooit wordt uitgevoerd want dit kost tijd. Lees dus geen overbodige libraries in. Verstop deze desnoods in een conditionele include.
  • Gebruik CSS waar mogelijk. Uw webpagina's worden er korter van en de laadtijden verminderen.
  • Gebruik de string en array zoek en vervang functies van PHP. Deze zijn vele malen sneller dan zelfgeschreven lusjes.


Veel succes met het optimaliseren van uw site!