2010-12-10 9 views
7

Lo que tengo en la cabecera:PHP Estadísticas Obtener página de carga - ¿Cómo miden php ejecución del script/tiempo de carga

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

Lo que tengo en el pie de página:

$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.'; 

Salida: Página generada en 1292008977.54 segundos.

¿Alguien puede ayudarme a entender por qué el resultado no es el correcto? Estoy usando PHP5.

+7

está sobreescribiendo $ start somewhere –

+1

Acabo de ejecutar su código anterior con un 'sleep (2);' entre el 'encabezado' y 'footer' y obtuve la 'Página generada en 2.0055 segundos. Así que es algo en el en medio de tu guión, probablemente. (que Col. Shrapnel escribió mientras estaba ejecutando mi prueba ...) – Erik

+0

Mi código o el código enumerado en las primeras 2 respuestas funciona para mí. Debe ser algo en el resto de mi script que está causando los problemas. Noté que la variable de tiempo de inicio no existe en mi archivo de pie de página. – ATLChris

Respuesta

4

microtime() devuelve la corriente marca de tiempo Unix con microsegundos. No veo ninguna matemática allí que hace la conversión de microsegundos a segundos.

microtime(true) devuelve el tiempo como un flotador en segundos

+2

puedes verlo en esta misma pregunta, tonto –

+0

yikes. Totalmente pasé de largo eso. la lectura es fundamental :) –

0

me gusta usar algo como esto. Facilita la temporización de varios bloques de código sin tener que hacer malabarismos con los nombres de las variables y demás. las sesiones deben estar habilitadas.

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); 
    } 
} 

uso:

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

Esto no solucionará su problema, aquí no ocurre una conversión temporal. Ver mi respuesta –

+0

@ Daniel Bingham: Su respuesta es incorrecta, el código anterior funciona bien, y no tiene que hacer nada con la salida microtime() como está sugiriendo. Su problema es que la variable de inicio se sobrescribe en el medio de su script. El código de chicos funciona bien si solo lo copias y lo pegas. El problema es lo que tenga entre el código que no está publicado. – profitphp

+0

usando la sesión para este propósito es simplemente exagerado y estúpido –

5

Se puede utilizar esta función simple para evitar el problema ámbito de las 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 ¿alguien de estos entusiastas ayudantes aprenderá ** microtime (verdadero) ** por fin? –

+0

@Col. Shrapnel * doh! * –

+0

@Col. Shrapnel: Mi error, simplemente reescribí la solución de ATLChris en una función en el primer acercamiento ... ¡Gracias por la sugerencia! –

5

Al ver lo que este es el primer resultado en Google pensé que había compartir mi solución a este problema Poner esto en la parte superior de la página:

$startScriptTime=microtime(TRUE); 

Y a continuación, poner el código en la parte inferior de la página:

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

Al ver la fuente de una página se puede ver el tiempo de carga en una comenta en la última línea de tu 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

poner esto en su cabecera

<?php 

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

?> 

y esto en el pie de página

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

Esto le dirá cuánto tiempo le llevó a su página de sitios para generar y cómo se utilizó la cantidad de memoria para cargar la página

0

El problema es con alcance variable. Establece su variable $ start en el encabezado, pero en el pie de página, esta variable estará vacía. Entonces $ total_time sería la hora actual - 0, que le da la hora actual.

Una solución es utilizar GLOBALS de php.En el encabezado:

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

Y en el pie de página:

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

En lugar de utilizar microtime en cada página, lo que haría es insertar microtime en $ _REQUEST y luego restar ese momento de la hora exacta dentro de una función y un conjunto que dicha función se llama cuando la ejecución del script se termina usando:

register_shutdown_function ('Your_function_name');

creo que es útil usar un script global que se incluirá al comienzo de cada script/clase en toda la aplicación, me ayuda a manejar errores, administrar sesiones, etc. ...

Añadiendo microtime a $ _REQUEST sería el primera línea en esa secuencia de comandos y puede incluir su función de terminación allí también.

Cuestiones relacionadas