microtime

Die Scriptsprache PHP fĂĽr die Gestaltung von dynamischen Websites.

microtime

Beitragvon max_payne » Mi 05 Jul, 2006 20:23

Hallo
Ich wĂĽrd gerne die Page-Generation-Time ausgeben.

Wie mach ich das genau?
Wenn ich jetzt microtime() aufrufe, liefert er mir zb:

0.05917000 1152127288

Das wäre ja gut...aber _wie_ rechne ich mit diesem wert?
max_payne
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4982
Registriert: Mo 30 Aug, 2004 12:25

Beitragvon radditz » Mi 05 Jul, 2006 20:25

http://de.php.net/manual/en/function.microtime.php

Example 1. Timing script execution with microtime()
Code: Alles auswählen
<?php
/**
* Simple function to replicate PHP 5 behaviour
*/
function microtime_float()
{
   list($usec, $sec) = explode(" ", microtime());
   return ((float)$usec + (float)$sec);
}

$time_start = microtime_float();

// Sleep for a while
usleep(100);

$time_end = microtime_float();
$time = $time_end - $time_start;

echo "Did nothing in $time seconds\n";
?>

Example 2. Timing script execution in PHP 5
Code: Alles auswählen
<?php
$time_start = microtime(true);

// Sleep for a while
usleep(100);

$time_end = microtime(true);
$time = $time_end - $time_start;

echo "Did nothing in $time seconds\n";
?>
Telematica DSL Solo Pro 30 Mbit/s
Vorher: A1 VDSL 16 Mbit/s
radditz
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4399
Registriert: Mo 23 Jun, 2003 16:50

Beitragvon FTH » Mi 05 Jul, 2006 20:31

Hallo max_payne
am Beginn des Scripts:

$time_start = microtime(true);

am Ende des Scripts:

$time_end = microtime(true);
$page_generation_time = $time_end - $time_start;

der Wert sollte dann in Microsekunden sein :)
Linux is like a tent - no gates, no windows and an apache inside

http://www.inode.at
FTH
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 35
Registriert: Mi 25 Jan, 2006 10:10
Wohnort: Weiz

Beitragvon max_payne » Mi 05 Jul, 2006 20:32

thx

Edit: Kann mir noch jemand verraten, warum es nur funktioniert, wenn microtime mit true aufgerufen wird?
max_payne
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4982
Registriert: Mo 30 Aug, 2004 12:25

Beitragvon lordpeng » Mi 05 Jul, 2006 20:36

>Linux is like a tent - no gates, no windows and an apache inside
s/tent/wigwam/
lordpeng
Moderator
Moderator
 
Beiträge: 10183
Registriert: Mo 23 Jun, 2003 22:45

Beitragvon FTH » Mi 05 Jul, 2006 20:40

@max_payne: Ja das kann dir jemand verraten, nämlich die Dokumentation
!
:rtfm:

wenn du true ĂĽbergibst, bekommst du den Wert als float, was zum Rechnen doch einfacher ist, ...
Linux is like a tent - no gates, no windows and an apache inside

http://www.inode.at
FTH
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 35
Registriert: Mi 25 Jan, 2006 10:10
Wohnort: Weiz

Beitragvon max_payne » Do 06 Jul, 2006 21:39

Nachtrag:
Workaround fĂĽr PHP 4?

[quote='PHP5']
Page generation Time:
1152218238.28
1152218238.69
0.403944015503
[/quote]

[quote='PHP']
Page generation Time:
0.81698600 1152218285
0.08524400 1152218286
-0.731742
[/quote]

(Dass man da jetzt umständlich rumrechnen kann ist mir klar, aber ich würd was einfaches suchen, was man auf für PHP4 nehmen kann.)
max_payne
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4982
Registriert: Mo 30 Aug, 2004 12:25

Beitragvon FTH » Do 06 Jul, 2006 22:08

Hallo
folgendes sollte auch in php4 funktionieren. Kanns aber leider im Moment nicht testen.

Code: Alles auswählen
//Funktion um den Microsekundenteil zu den Sekunden zu addieren
function mt()
{
  $mictime = microtime();
  $h = explode(" ",$mictime);
  return $h[1]+$h[0];
}

//Der Rest sollte selbsterkärend sein
$begin = mt();
usleep(1000000);
$end = mt();
echo "Dauer: ".($end-$begin)."Sekunden";


hth
FTH
Linux is like a tent - no gates, no windows and an apache inside

http://www.inode.at
FTH
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 35
Registriert: Mi 25 Jan, 2006 10:10
Wohnort: Weiz

Beitragvon max_payne » Do 06 Jul, 2006 22:16

Jap, funktioniert.
Danke!
max_payne
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4982
Registriert: Mo 30 Aug, 2004 12:25

Beitragvon codec » Do 06 Jul, 2006 22:20

ermittelt php version und arbeitet dementsprechend
[php]
<?php
$ver = (float)substr(phpversion(),0,3);
$start = $ver<5?(float) array_sum(explode(' ', microtime())):microtime(true);
usleep(100);
$end = $ver<5?(float) array_sum(explode(' ', microtime())):microtime(true);
echo "Did nothing in ".($end-$start)." seconds\n";
?>
[/php]
codec
Board-User Level 1
Board-User Level 1
 
Beiträge: 553
Registriert: Di 28 Okt, 2003 12:48

Beitragvon max_payne » Do 06 Jul, 2006 22:22

Und welche der beiden Varianten ist jetzt schneller?
max_payne
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4982
Registriert: Mo 30 Aug, 2004 12:25

Beitragvon FTH » Do 06 Jul, 2006 22:24

Du hast nun 2 Methoden um die AusfĂĽhrungszeit zu Messen.

Also schreite zur Tat und teile uns deine Messergebnisse mit!

Ich warte gespannt auf dein Ergebnis! :ok:
Linux is like a tent - no gates, no windows and an apache inside

http://www.inode.at
FTH
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 35
Registriert: Mi 25 Jan, 2006 10:10
Wohnort: Weiz

Beitragvon max_payne » Do 06 Jul, 2006 22:26

Du hast nun 2 Methoden um die AusfĂĽhrungszeit zu Messen.

Tja, ich weiĂź zwar ned worans liegt, aber die Zeit schwankt ziemlich.
(zwischen 11 und 370 ms)
max_payne
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4982
Registriert: Mo 30 Aug, 2004 12:25

Beitragvon FTH » Do 06 Jul, 2006 22:33

Meinst du mit schwanken, dass jede Methode fĂĽr sich, bei mehrmaligem Messen unterschiedliche Werte liefert, oder dass eine Methode um den Faktor >30 langsamer ist.

Ich hoffe du hast beide Varianten so umgeformt, dass sie auch vergleichbar sind. (Diverse ifs entfert, die fĂĽr den Vergleich des Grundprinzips nicht notwendig sind, bei meiner Funktion noch das casting dazu eingebaut, ...)
Linux is like a tent - no gates, no windows and an apache inside

http://www.inode.at
FTH
Junior Board-Mitglied
Junior Board-Mitglied
 
Beiträge: 35
Registriert: Mi 25 Jan, 2006 10:10
Wohnort: Weiz

Beitragvon max_payne » Do 06 Jul, 2006 22:35

Meinst du mit schwanken, dass jede Methode fĂĽr sich, bei mehrmaligem Messen unterschiedliche Werte liefert, oder dass eine Methode um den Faktor >30 langsamer ist.

Nein, ich hab das jetzt in ein bestehendes Skript eingebaut, da sind uA sql-qrys dabei.

edit:

Did nothing in 2.40802764893E-05 seconds Did nothing in 1.8835067749E-05 seconds

Fazit: Lösung mit "eigener" Funktion ist schneller.
max_payne
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4982
Registriert: Mo 30 Aug, 2004 12:25

Nächste

ZurĂĽck zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 21 Gäste