Ben naar aanleiding van dit topic nieuwsgierig geworden naar de performance van de verschillende taalstructuren binnen PHP, en ben dus maar aan het benchmarken geslagen (klein beetje maar, rest komt later, eerst over een half uurtje maar eens tentamen maken

). Hieruit blijkt dat er
grote verschillen zijn in execution time hoe je iets laat uitvoeren door PHP.
In eerste instantie heb ik gekeken hoe het zit met arrays en 'gewone' variabelen, ik wil zeker ook nog eens MySQL-benchmarks gaan draaien, maar dat komt nog wel

.
http://www.siemenroorda.nl/bench/array.html : de resultaten van het vullen en uitlezen van arrays (geindexeerd en associatief, impliciet en expliciet) (22.000.000 PHP-opdrachten

)
http://www.siemenroorda.nl/bench/vars.html : de resultaten van het werken met variabelen (toekennen, uitlezen, verschillende soorten quotes, verschillende soorten concatenations) (35.000.000 PHP-opdrachten)
http://www.siemenroorda.nl/bench/mysql.html : de resultaten van het werken met een MySQL-database (fulltext-serach, select, data naar PHP halen) (1.125 queries).
http://www.siemenroorda.nl/bench/php.html : de resultaten van het werken met PHP-tags (code onderbreken voor ?><?php of code door laten lopen; zoals Zoepnek aanhaalde) (5.000.000 PHP-opdrachten).
Samenvattend, met een paar naar mijn mening opvallende uitkomsten:
Geindexeerde arrays:
- inserten in een groeiende grote array kost meer tijd dan in een vaste kleine array (telkens
array[0] <=>
array[]) (+100%)
- [$i] en [] is ongeveer gelijk
-
array(0 => x) is trager dan
array[0] = x (+50%)
-
array($i => x) is sneller dan
array[$i] = x (+22%)
Associatieve arrays:
- geen gebruik van quotes is veel langzamer dan het gebruik van quotes (+200%)
- gebruik van
array('x' => y) is trager dan het impliciet toewijzen (
array['x'] = y) (+60%)
(Dit in tegenstelling tot wat ACM zei!)
- enkele en dubbele quotes maken geen verschil
Doorlopen van arrays:
-
for (1 to count) is iets sneller dan
foreach($arr as $val)
-
while (list ($key, $val) = each ($testarray)); is veel trager dan
for of
foreach (+180%)
Variabelen toekennen:
- voor getallen verdient geen quotes gebruiken bij toekenning de voorkeur (+20%)
- voor strings verdient wel quotes gebruiken bij toekenning de voorkeur (+200%)
- geen verschil tussen dubbele en enkele quotes
Variabelen uitlezen:
-
echo $var is sneller dan
echo "$var" (+30%)
-
echo "string ".$var is sneller dan
echo "string $var" (+50%)
- concatenating met . is sneller dan met + (+50%)
MySQL:
-
MATCH ... AGAINST is veel sneller dan
LIKE (+400%)
-
LIKE 'A%' is veel sneller dan
REGEXP '^A' (+2000%)
-
SELECT id is sneller dan
SELECT * (tabel met 5 kolommen) (+80%)
-
SELECT * is ongeveer even snel als
SELECT col1, col2, ... (over alle kolommen)
- er is weinig verschil tussen
mysql_fetch_row en
mysql_fetch_object (wat binnenhalen van de data betreft)
Gebruik van PHP-tags:
- er is geen verschil tussen het al dan niet onderbreken van de PHP-engine:
for (...) { opdrachten } en
for (...) { ?><?php opdrachten ?><?php } geven gelijke processing times; meestal ligt het zeer kleine voordeel bij gebruik van de eerste code.
Ik zal als ik wat meer tijd heb de code wel online zetten, kan iedereen het voor zich proberen
Gebruikte configuratie:
AMD XP2000+
512 MB 333 MHz-geheugen
Windows 2000
Xitami
PHP 4.3.0
MySQL 3.23.49
[
Voor 44% gewijzigd door
sjroorda op 10-05-2003 19:36
]