article bench timer

La classe benchmark timer

La classe Benchmark est basée sur la fonction microtime() de php. Cette fonction renvoie un timestamp UNIX et les microsecondes comme par exemple : 0.57032800 1112813819

En pratique, voici un exemple donné dans la documentation de php qui permet de récupérer le microtime à un instant précis sur une page php :

/**
* Fonction simple identique à celle en PHP 5 qui va suivre
*/

function microtime_float()
{
   list(
$usec, $sec) = explode(' ', microtime());
   return ((float)
$usec + (float)$sec);
}


$time_start = microtime_float();

// Attend pendant un moment
usleep(100);

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

echo
"Ne rien faire pendant $time secondesn";
?>

Depuis php 5, il y a moyen d'effectuer exactement la même opération plus rapidement :

$time_start = microtime(true);

// Attend pendant un moment
usleep(100);

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

echo
"Ne rien faire pendant $time secondesn";
?>

La classe Benchmark_Timer

Après cette brève introduction, attaquons-nous au vif du sujet : la classe Benchmark_Timer contenue dans le fichier Timer.php de l'archive disponible sur le site de PEAR.
Cette classe permet de mesurer de manière précise le temps d'exécution d'un script comme le font les fonction du dessus. Mais d'une manière plus simple...

Benchmark_Timer : Mode d'emploi

L'utilisation de cette classe est très simple, voici un exemple d'une utilisation de base, par exemple pour connaître le temps d'exécution total d'une page php :

require 'Timer.php'; // Ouverture du fichier Timer.php contenant la classe du Benchmark

$timer = new Benchmark_Timer(); // Initialisation de la classe du Bench
$timer->start(); // Commencement du Bench
// instructions... | Page php | etc...

$timer->stop(); // Arrêt du Bench
$timer->display(); // Affichage des résultats du Bench dans un tableau HTML
?>

Ou alors, encore plus court :

require 'Timer.php'; // Ouverture du fichier Timer.php contenant la classe du Benchmark

$timer = new Benchmark_Timer(true);
// instructions... | Page php | etc...
?>

Voila, tout simplement.

Il y a aussi une utilisation plus complète qui permet de séparer les différents résulats des Benchmarks en secteurs (exemple donné dans l'archive de la classe) :

require '../Timer.php';

function
wait($amount) {
    for (
$i=0; $i < $amount; $i++) {
        for (
$i=0; $i < 100; $i++);
    }
}


$timer = new Benchmark_Timer();
$timer->start();
wait(10);
$timer->setMarker('Mark1');
echo
"Temps écoulé entre Start et Mark1: " .
      
$timer->timeElapsed('Start', 'Mark1') . "n";
wait(50);
$timer->stop();
$timer->display();
?>

Ou encore :

require '../Timer.php';

function
wait($amount) {
    for (
$i=0; $i < $amount; $i++) {
        for (
$i=0; $i < 100; $i++);
    }
}


$timer = new Benchmark_Timer(true);
wait(10);
$timer->setMarker('Mark1');
echo
"Temps écoulé entre Start et Mark1: " .
      
$timer->timeElapsed('Start', 'Mark1') . "n";
wait(50);
?>

Voilà, maintenant que vous savez comment fonctionne la classe Benchmark_Timer, vous pouvez consulter les autres articles !