Account Options

  1. Sign in
The old Google Groups will be going away soon.
Switch to the new Google Groups.
Google Groups Home
« Groups Home
Message from discussion microtime() - Benchmark
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Marcel Hellkamp  
View profile   Translate to Translated (View Original)
 More options Nov 28 2004, 8:36 am
Newsgroups: de.comp.lang.php.misc
From: Marcel Hellkamp <n...@spielefanpages.de>
Date: Sun, 28 Nov 2004 14:36:02 +0100
Local: Sun, Nov 28 2004 8:36 am
Subject: Re: microtime() - Benchmark

Stephan Mann wrote:

> On 2004-11-27 12:32:57, Johannes Mueller wrote:

>> $start = microtime();
>> [..code..]
>> echo ((microtime()-$start)/1000);

>> ...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?

> 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.

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


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.