Mailinglisten-Archive |
Matthias Pigulla wrote: > Ich denke mal, daß while() und for() intern recht > ähnlich aufgebaut sind, und K&R sagen da ja auch nichts zu. In PHP sind while() und for() unterschiedlich aufgebaut, weil PHP eine interpretierte Sprache ist. Wegen der Implementierung von for() ist es deutlich langsamer als while(); Zeev hat da vor geraumer Zeit mal was zu geschrieben. Man kann das auch testen: kk_(at)_poe /tmp $ cat probe-for.php3 <?php for($i=0; $i<50000; $i++); ?> kk_(at)_poe /tmp $ cat probe-while.php3 <?php $i=0; while($i<50000) $i++; ?> kk_(at)_poe /tmp $ cat bench #! /bin/sh -- PHP="/home/www/servers/phplib.shonline.de/cgi/php -q" $PHP -v echo "for 1" time $PHP probe-for.php3 echo "while 1" time $PHP probe-while.php3 echo "for 2" time $PHP probe-for.php3 echo "while 2" time $PHP probe-while.php3 echo "for 3" time $PHP probe-for.php3 echo "while 3" time $PHP probe-while.php3 echo "for 4" time $PHP probe-for.php3 echo "while 4" time $PHP probe-while.php3 echo "for 5" time $PHP probe-for.php3 echo "while 5" time $PHP probe-while.php3 kk_(at)_poe /tmp $ bench 3.0.8-dev for 1 real 9.8 user 8.1 sys 0.1 while 1 real 5.2 user 5.0 sys 0.1 for 2 real 9.2 user 8.0 sys 0.1 while 2 real 7.4 user 5.0 sys 0.1 for 3 real 14.8 user 8.1 sys 0.1 while 3 real 8.5 user 4.9 sys 0.1 for 4 real 13.9 user 8.2 sys 0.0 while 4 real 5.1 user 4.9 sys 0.1 for 5 real 8.3 user 8.1 sys 0.1 while 5 real 6.5 user 4.8 sys 0.1 Von interesse ist hier weniger die WCT als die user- und sys-Summe. Diese ist bei while konsistent im Bereich von 5 Sekunden, bei for konsistent im Bereich von 8 Sekunden. Oder anders gesagt: while() ist 60% schneller als for(). Das wird sich erst mit Zend significant ändern. > Gute Angewohnheit ;-). Dann solltest Du vorher ein > reset($feld) nicht vergessen, falls Du vorher schon > mal über das Feld iteriert hast. Nicht initialisierte Variablen werden bei Warning Level 15 angemeckter, schon von daher ist "$summe = 0" essentiell. Vor einem "reset()" auf eine Variable, die nicht definiert ein Array ist, sollte man ein is_array()-Prädikat auswerten. Das ist insbesondere dann notwendig, wenn das Array als GPC-Variable vom Internet übernommen wurde; aber dann muß man ja sowieso dekontaminieren. Kristian -- Kristian Köhntopp, NetUSE Kommunikationstechnologie GmbH Siemenswall, D-24107 Kiel, Germany, +49 431 386 436 00 Using PHP3? See our web development library at http://phplib.shonline.de/ (GPL)
php::bar PHP Wiki - Listenarchive