nodelab

Calculer le temps d'exécution d'une page PHP facilement

Utilité

Je suis persuadé que vous avez, de temps à autre, eu le besoin de savoir combien de temps prenait l'exécution de l'un de vos scripts. Vous avez peut-être cherché sur l'internet mondial et vous y avez trouvé des trucs genre microtime() ou autre mais vous n'avez pas voulu l'utiliser alors vous avez fait sans.

Cette classe est là pour, très simplement et sans dépendance aucune, vous permettre de calculer à peu près n'importe quel intervalle dans vos scripts php.

Comment l'utiliser, les fonctionnalités de base

Import de la classe

Rien de difficile par ici. Placez le fichier ou vous voulez dans votre arborescence et importez le de la manière qui vous plaît : include_once, require, etc.

Utilisation simple

La classe benchtime démarre lors de l'instance et s'arrête lorsque vous faites un makePoint(). Il vous suffit ensuite de demander d'afficher les résultats.

// inclusion
require_once 'path/Benchtime.php';

// instance de la classe, démarrage du chrono
$bt = new Benchtime();

// votre code compliqué ici (voir tout votre projet)
// je fais une boucle de sleep pour avoir un truc qui dure un peu
for ($i = 0; $i < rand(5, 10); $i++) {
    sleep(rand(1, 3));
}

// stop le chrono
$bt->makePoint();

// affichage du résultat
echo $bt->getResult();

Aller plus loin

Revenons à ce que renvoie notre méthode getResult(). En fait, l'objet stocke une liste de valeurs correspondantes aux breakpoints. On peut donc, avec le même objet mettre une série de breakpoints et donc connaître le temps d'exécution du script à différents endroits, avec le même objet.

La méthode getResult() attend un format (html par défaut) et renvoie une chaine de caractère avec le temps de chaque breakpoints.

Nommer son benchtime, nommer ses breakpoints

On peut, si, par exemple, on créé plusieurs objets benchtime dans un même script, nommer chacun de ces objets. Ce nom sera renvoyé lors de l'appel de getResult(). Cela se fait lors de l'instance de la classe :

// instance de la classe avec un label pour cet objet
$bt = new Benchtime('Temps total du script');

Breakpoints multiples

L'intérêt de cette classe, c'est aussi le fait de pouvoir débugger un script qui prend trop de temps.

Par exemple imaginons un long script avec un appel SQL, un tri de gros tableau, et une écriture dans un fichier. Le script met plusieurs secondes à s'exécuter. Bon, on pourrait supprimer des bouts de codes pour voir qui, parmi ces opérations, est la fautive; mais ça pourrait poser des problèmes de dépendances. En utilisant cette classe vous gardez le code intact tout en sachant précisément où se trouve le problème :

// instance de la classe
$bt = new Benchtime('Débug');

// appel SQL long et compliqué
// $db = new PDO(...);
// [...]

$bt->makePoint('Appel SQL');

// tri du tableau
// usort($array, function() {
//     [...]
// }
// [...]

$bt->makePoint('Tri du tableau');

// écriture dans un fichier
// [...]

$bt->makePoint('écriture fichier');

// affichage du résultat
echo $bt->getResult();

Format de sortie

La classe permet de sortir ces données sous différents formats :

  • HTML : renvoie une chaine d'un tableau HTML. Le titre est le label de l'objet. Les valeurs sont indexées, avec le temps en seconde et le label du breakpoint;
  • Texte : renvoie une chaine d'un tableau en ASCII. Les valeurs sont les mêmes que pour le tableau en HTML;
  • PHP : renvoie un tableau associatif exploitable directement.

Les différents formats de sorties sont des constantes de classe.

// appel des sorties avec les constantes de classe
$bt->getResult(Benchtime::HTML);
$bt->getResult(Benchtime::TXT);
$bt->getResult(Benchtime::PHP);

// exemple de sortie en mode txt
Débug
-------------------
   | time  | name  
---|-------|-------
#1 | 2.000 | Appel SQL
#2 | 3.000 | Tri du tableau
#3 | 1.001 | Ecriture fichier

Téléchargement

kobckibh8y.php2,38 Ko

0 commentaire

Aucun commentaire n'a été posté.

Poster un commentaire