2010-12-10 8 views
7

Ce que je dans l'en-tête:PHP Get chargement de la page Statistiques - Comment mesurer l'exécution du script php/temps de chargement

$time = microtime(); 
$time = explode(' ', $time); 
$time = $time[1] + $time[0]; 
$start = $time; 

Ce que j'ai dans le pied de page:

$time = microtime(); 
$time = explode(' ', $time); 
$time = $time[1] + $time[0]; 
$finish = $time; 
$total_time = round(($finish - $start), 4); 
echo 'Page generated in ' . $total_time . ' seconds.'; 

Sortie: Page générée en 1292008977.54 secondes.

Est-ce que quelqu'un peut m'aider à comprendre pourquoi le résultat n'est pas juste? J'utilise PHP5.

+7

Vous commencez à écrire $ start –

+1

Je viens juste d'exécuter votre code ci-dessus avec 'sleep (2);' entre 'header' et 'footer' et j'ai obtenu 'Page générée en 2.0055 secondes. milieu de votre script probablement. (que le Colonel Shrapnel a écrit pendant que je courais mon test ..) – Erik

+0

Mon code ni le code indiqué dans les 2 premières réponses ne me conviennent pas. Ce doit être quelque chose dans le reste de mon script qui cause les problèmes. J'ai remarqué que la variable start time n'existe pas dans mon fichier de pied de page. – ATLChris

Répondre

4

microtime() renvoie l'horodatage Unix actuel avec microsecondes. Je ne vois pas de maths qui fait la conversion de microsecondes en secondes.

microtime(true) retourne le temps comme un flotteur en secondes

+2

vous pouvez le voir dans cette question même, idiot –

+0

yikes. J'ai totalement soufflé juste après cela. la lecture est fondamentale :) –

0

J'aime utiliser quelque chose comme ça. Facilite le chronométrage de plusieurs blocs de code sans jongler avec les noms de variables et autres. les sessions doivent être activées.

function code_timer ($name) { 

    $mtime = explode(' ',microtime()); 
    $time = $mtime[1] + $mtime[0]; 

    //determine if we're starting the timer or ending it 
    if ($_SESSION["timer-$name"]) { 
     $stime=$_SESSION["timer-$name"]; 
     unset($_SESSION["timer-$name"]); 
     return ($time - $stime); 
    } else { 
     $_SESSION["timer-$name"]=$time; 
     return(true); 
    } 
} 

utilisation:

code_timer ('a'); 
//do stuff 
echo "page generated in " . code_timer('a'); 
+0

Cela ne va pas résoudre son problème, il y a une conversion de temps qui ne se passe pas ici. Vois ma réponse. –

+0

@ Daniel Bingham: Votre réponse est fausse, le code ci-dessus fonctionne bien, et vous n'avez rien à faire à la sortie de microtime() comme vous le suggérez. Son problème est que la variable de démarrage est écrasée au milieu de son script. Le code des gars fonctionne bien si vous ne faites que copier et coller. Le problème est tout ce qu'il a entre le code qui n'est pas affiché. – profitphp

+0

en utilisant la session à cet effet est juste exagéré et stupide –

5

Vous pouvez utiliser cette fonction simple d'éviter la question de la portée des variables:

<?php 

function timer() 
{ 
    static $start; 

    if (is_null($start)) 
    { 
     $start = microtime(true); 
    } 
    else 
    { 
     $diff = round((microtime(true) - $start), 4); 
     $start = null; 
     return $diff; 
    } 
} 

timer(); 

echo 'Page generated in ' . timer() . ' seconds.'; 
+1

OMG quelqu'un de ces assistants enthousiastes apprendra-t-il enfin ** microtime (true) **? –

+0

@Col. Shrapnel * doh! * –

+0

@Col. Shrapnel: Mon tort, il suffit de réécrire la solution ATLChris dans une fonction sur la première approche ... Merci pour la suggestion! –

5

Voyant comment cela est le premier résultat de Google que je pensais avoir partager ma solution à ce problème. Mettre cela en haut de votre page:

$startScriptTime=microtime(TRUE); 

Et puis mettre ce code en bas de votre page:

$endScriptTime=microtime(TRUE); 
$totalScriptTime=$endScriptTime-$startScriptTime; 
echo "\n\r".'<!-- Load time: '.number_format($totalScriptTime, 4).' seconds -->'; 

Lorsque vous affichez la source d'une page, vous pouvez voir le temps de chargement dans un commentez la dernière ligne de votre HTML.

1
$page_loadtime_in_millisec = ($page_loadtime/1000); 
echo '<pre>Page Infor: 
Page Load Time : ' . $page_loadtime.' <b>Microseconds</b><br/> 
Page Load Time : ' . $page_loadtime_in_millisec.' <b>Milliseconds</b><br/> 
Page Load Time : ' . number_format(($page_loadtime_in_millisec/1000),18) . ' <b>Seconds</b></pre>'; 
0

Mettez dans votre tête

<?php 

$starttime = explode(' ', microtime()); 
$starttime = $starttime[1] + $starttime[0]; 

?> 

et dans votre pied de page

<html><center>Page generated in <?php $load = microtime();print (number_format($load,2));?> seconds. <?php 
$loadtime = explode(' ', microtime()); $loadtime = $loadtime[0]+$loadtime[1]-$starttime; echo 'Peak memory usage: ',round(memory_get_peak_usage()/1048576, 2), 'MB'; 
?></center></html> 

cela vous dira combien de temps il a fallu votre page sites pour générer et la quantité de mémoire a été utilisé pour charger la page

0

Le problème est lié à la portée variable. Vous définissez votre variable $ start dans l'en-tête, mais en pied de page, cette variable sera vide. Donc $ total_time ne serait que l'heure actuelle - 0, vous donnant l'heure actuelle.

Une solution consiste à utiliser les GLOBALS de php.Dans l'en-tête:

$GLOBALS['time_start'] = microtime(true); 

Et en bas de page:

$total_time = round(($finish - $GLOBALS['time_start']), 4); 
0

Au lieu d'utiliser microtime dans chaque page, ce que je voudrais faire est d'insérer microtime dans _REQUEST $ et déduisez cette fois de la heure actuelle dans une fonction et un ensemble qui fonctionnent à appeler lorsque l'exécution du script est terminé à l'aide:

register_shutdown_function ('Your_function_name');

Je pense que il est utile d'utiliser un script global qui sera inclus au début de chaque script/classe dans l'application, cela m'aide à gérer les erreurs, gérer les sessions, etc ...

Ajouter un microtime à $ _REQUEST serait le première ligne dans ce script et vous pouvez y inclure votre fonction de terminaison.

Questions connexes