340 votes

Une façon précise de mesurer les temps d'exécution des scripts php scripts.

Je souhaite connaître le nombre de millisecondes nécessaires à l'exécution d'une boucle PHP.

Je connais la structure d'un algorithme générique, mais je n'ai aucune idée de la manière de l'implémenter en PHP :

Begin
init1 = timer(); // where timer() is the amount of milliseconds from midnight
the loop begin
some code
the loop end
total = timer() - init1;
End

1 votes

Si vous avez besoin d'un tel système en production, vous pouvez vous amuser avec des séries d'instructions microtime(), mais si c'est juste pour des tests, utilisez simplement Le profileur de xdebug par exemple. L'absence de code désordonné est un réel avantage.

673voto

Tim Cooper Points 55292

Vous pouvez utiliser le microtime pour cela. A partir de la documentation :

microtime - Retourne l'horodatage Unix actuel en microsecondes


Si get_as_float est fixé à TRUE entonces microtime() renvoie un nombre flottant, qui représente le temps actuel en secondes depuis l'époque Unix, avec une précision de l'ordre de la microseconde.

Exemple d'utilisation :

$start = microtime(true);
while (...) {

}
$time_elapsed_secs = microtime(true) - $start;

45 votes

Vous avez besoin microtime(true) si vous souhaitez effectuer des calculs avec la valeur de retour.

12 votes

Je sais que c'est beaucoup trop tard (presque 4 ans), mais en guise de commentaire... en utilisant ces calculs (avec le paramètre get_as_float comme true ) vous donnera des résultats en secondes selon la documentation de PHP.

0 votes

Get_as_float renvoie un FLOAT au lieu d'une STRING, donc en face on peut faire des calculs avec la valeur de retour... check php.net/manuel/fr/fonction.microtime.php : Si get_as_float vaut TRUE, microtime() renvoie un nombre flottant, qui représente le temps actuel en secondes depuis l'époque Unix, avec une précision de l'ordre de la microseconde.

100voto

Aditya Bhatt Points 3210

Vous pouvez utiliser microtime(true) avec les bonnes manières qui s'imposent :

Placez ceci au début de votre fichier php :

//place this before any script you want to calculate time
$time_start = microtime(true);

// votre code script va ici

// do something

Placez ceci à la fin de votre fichier php :

// Display Script End time
$time_end = microtime(true);

//dividing with 60 will give the execution time in minutes other wise seconds
$execution_time = ($time_end - $time_start)/60;

//execution time of the script
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';

Vous obtiendrez les résultats suivants minutes .

92voto

Iwazaru Points 77

Vous pouvez utiliser REQUEST_TIME de la $_SERVER réseau superglobal. Extrait de la documentation :

REQUEST_TIME
L'horodatage du début de la demande. (Disponible depuis PHP 5.1.0.)

REQUEST_TIME_FLOAT
L'horodatage du début de la demande, avec précision à la microseconde . (Disponible depuis PHP 5.4.0.)

De cette façon, vous n'avez pas besoin d'enregistrer un timestamp au début de votre script. Vous pouvez simplement faire :

<?php
// Do stuff
usleep(mt_rand(100, 10000));

// At the end of your script
$time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];

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

Ici, $time contiendrait le temps écoulé depuis le début du script en secondes, avec une précision de l'ordre de la microseconde (ex. 1.341 pour 1 seconde et 341 microsecondes)


Plus d'informations :

Documentation PHP : $_SERVER variables et microtime fonction

0 votes

C'est utile de le savoir. Vous pouvez donc utiliser : $start = $_SERVER["REQUEST_TIME_FLOAT"]; $myscript = microtime(true); $bootstrap = $myscript - $start; ...do stuff ...; $myscripttime = microtime(true) - $myscript;

1 votes

D'après la documentation citée, $time contiendra la différence entre les secondes et non en microsecondes .

4 votes

@WimDeblauwe Pour clarifier, oui le résultat est en secondes. Mais avec microseconde précision . par exemple 1.1 équivaut à 1 seconde + 100 microsecondes.

29voto

Créer le fichier loadtime.php

<?php
class loadTime{
    private $time_start     =   0;
    private $time_end       =   0;
    private $time           =   0;
    public function __construct(){
        $this->time_start= microtime(true);
    }
    public function __destruct(){
        $this->time_end = microtime(true);
        $this->time = $this->time_end - $this->time_start;
        echo "Loaded in $this->time seconds\n";
    }
}

Que dans le début de votre script, après que <?php écrire include 'loadtime.php'; $loadtime=new loadTime();

Lorsque la page est chargée, il est écrit à la fin "Chargé en x secondes".

6 votes

Neat ! Mais si vous ne détruisez pas explicitement votre objet, la sortie apparaîtrait après la fermeture de l'objet. </html> qui n'est pas valide

0 votes

@gondo Non, il s'agira de secondes (les microsecondes étant exprimées comme des valeurs décimales de secondes).

22voto

Dvir Azulay Points 3804
$start = microtime(true);
for ($i = 0; $i < 10000; ++$i) {
    // do something
}
$total = microtime(true) - $start;
echo $total;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X