ich hab mir mal in Minimalzeit sowas wie n Benchmark überlegt:
--code--
$start = microtime();
[..code..]
echo ((microtime()-$start)/1000);
--/code--
...aber mich beunruhigt, dass im Manual unter microtime() eine
ebensolche Benchmark-Funktion steht, die aber für mich schwer
nachzuvollziehen ist. ...deswegen meine Frage: ist mein Benchmark das
selbe nur "einfacher"? ...und wenn nein, was hab ich nicht bedacht?
Danke
Johannes
Das beachtest du bei deinem Benchmark nicht, du subtrahierst und
dividierst also mit einem String.
Gruß, Hendrik
Lass dir mal ausgeben, was du von microtime() bekommst. Da ist ein
Leerzeichen drin. Damit zu rechnen wird dir nicht gelingen. Das Beispiel
im Manual nimmt deshalb diesen String auseinander. Alternativ kann man in
PHP5 mittels microtime(true) direkt einen Float-Wert bekommen, mit dem man
dan rechnen kann. Soweit der Manual-Vorlesedienst.
Aber warum benutzt du nicht einfach PEAR::Benchmark [0]?
hth, stephan
--
[0] http://pear.php.net/package/Benchmark
In PHP4 kann man das Ergebnis auch durch den Einzeiler
$time = array_sum(explode(" ", microtime()));
erreichen.
> Aber warum benutzt du nicht einfach PEAR::Benchmark [0]?
Weil er selbst das Beispiel bei PHP.net nicht kapiert hat und daher
bestimmt nicht so schnell durch die PEAR-Herachie durchsteigt.
Ich poste trotzdem mal meine Version einer Benchmark-Methode:
function timer($event = false) {
static $first, $last, $out;
$time = array_sum(explode(" ", microtime()));
if(!isset($first) OR $event === false)
$first = $time;
if(!$last OR $event === false)
$last = $time;
if($event === false)
return $out;
$out .= sprintf("Step:%8.4f Total:%8.4f [%s]\n",
($time - $last),
($time - $first),
$event);
$last = $time;
}
Anwendung:
Der Benchmark wird initiiert (auf 0 zurück gesetzt) durch 'timer();'
Nach jedem zu messenden Schritt muss 'timer('Beschreibung');' ausgeführt
werden. 'Beschreibung' kann eine Beschreibung des vorhergehenden
Abschnittes enthalten (darf nicht leer sein).
Am Schluss bekommt man mit 'echo timer();' die Statistik ausgegeben.
Dabei wird auch gleich der Timer auf 0 zurück gesetzt.
Die Ausgabe sieht in etwa so aus:
Step: 0.0001 Total: 0.0001 [SYS: INIT]
Step: 0.0016 Total: 0.0017 [SYS: Loading configurations]
Step: 0.0088 Total: 0.0105 [SYS: Open MySQL connection]
Step: 0.0075 Total: 0.0180 [SYS: Loading libraries]
Step: 0.0002 Total: 0.0182 [USR: User management]
Step: 0.0006 Total: 0.0188 [MOD: Module management]
Step: 0.0027 Total: 0.0215 [TPL: Template parsing]
Step: 0.0023 Total: 0.0238 [SYS: global.php]
Step: 0.0050 Total: 0.0288 [MOD: Modul execution]
Step: 0.0002 Total: 0.0290 [TPL: Output assignment]
Step: 0.0196 Total: 0.0486 [TPL: Rendering]
Ich find die Methode komfortabler als die PEAR-Alternative und setze sie
bei so gut wie allen meinen Projekten zum Testen des Laufzeitverhaltens
ein. Durch die static-variablen kann sie sogar innerhalb von Klassen und
Methoden oder includes eingefügt werden.
naja, vieleicht hilfts ja
mfg
Marcel Hellkamp