Multipliez les timers sur vos scripts php et benchez facilement vos pages

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 169 fois - Téléchargée 17 fois

Contenu du snippet

Voici un script dont je suis assez fier car il permet de créer très très facilement des timers en PHP.

Vous pouvez ainsi afficher divers temps d'executions de toutes les parties de votre code !

Le fonctionnement (tellement simple :P) est expliqué dans la conclusion.

Source / Exemple :


<?php

// Fonctions de timer écrites par MonkeyIsBack offerte aux utilisateurs de phpcs.com
// Merci de respecter ce cadeau en laissant mon nom mentionné et l'adresse du site par lequel on peut me contacter.

function depart_timer($nom)
{
	$temp = explode(' ',microtime());
	$nom = strtoupper($nom);
	define('TIMER'.$nom.'DEBUT', $temp[1].substr($temp[0],1));
	unset($temp);
	return 1;
}

function fin_timer($nom)
{
	$temp = explode(' ',microtime()); 
	$nom = strtoupper($nom);
	define('TIMER'.$nom.'FIN', $temp[1].substr($temp[0],1));
	unset($temp);
	return 1;
}

function afficher_timer($nom)
{
	$nom = strtoupper($nom);
	define('TIMER'.$nom.'RESULTAT', bcsub(constant('TIMER'.$nom.'FIN'),constant('TIMER'.$nom.'DEBUT'),6)*1000);
	return constant('TIMER'.$nom.'RESULTAT');
}

function easy_timer($nom)
{
	
	$nom = strtoupper($nom);
	
	if(defined('TIMER'.$nom.'FIN'))
	{	return afficher_timer($nom);
	}

	elseif(defined('TIMER'.$nom.'DEBUT'))
	{	fin_timer($nom);
		return;
	}

	else
	{	depart_timer($nom);
		return;
	}
}
?>

Conclusion :


L'utilisation est très simple, vous placez au début de votre script à "observer" un depart_timer('nom'). Où 'nom' doit être unique au risque d'afficher des données erronées. le script crée alors une constante "TIMERNOMDEBUT" qui contient le microtime.

A la fin de votre script, vous mettez fin_timer('nom'), où 'nom' doit être exactement le même qu'entré dans debut_timer. Plusieurs timers peuvent s'imbriquer et se croiser sans poser le moindre problème, pour peu qu'ils aient des noms uniques. Attention le script définissant des constantes, elles sont automatiquement mises en majuscules, il n'est donc pas sensible à la casse. Pensez à ne mettre que des caractères de a à z sans accents, les résultats pourraient être assez hasardeux autrement.

à l'endroit où vous souhaitez afficher le/les temps d'execution, placez un echo afficher_timer('nom'). Concaténez avec du texte pour la présentation (le script n'affique que le chiffre, en millisecondes. Consultez php.net pour obtenir des informations sur number_format() qui s'avère très pratique pour afficher ce genre de données). Vous pouvez afficher les données plusieurs fois bien entendu.

easy_timer est là pour faciliter la tâche de placement des benchmarks, néanmoins il ne fait qu'observer si les constantes sont définies pour chaque étape et décide donc de l'étape à executer. Il faut placer un echo sur le afficher_timer($nom) (au cas où vous ne souhaitiez pas vous servir de l'astuce décrite en dessous) avant le return.
Si un easy_timer est utilisé 4x ou plus avec le même $nom, il renverra dès la troisième occurence le benchmark des étapes 1 et 2 de $nom.

Note : les unset étaient obligatoires pour éviter les bugs (apparement microtime, mais pas tout à fait sur)

Autre point intéressant, si vous avez à afficher vos scripts à un endroit précis d'une page web (exemple un petit cadre en bas, etc), vous devriez envisager cette façon de procéder :

1) Placez vos timers de début de comptage du temps d'execution comme vous le souhaitez
2) Au moment de placer vos timers de fin d'execution, rajoutez également
$variable_de_votre_choix[]['texte'] = 'Script blablabla';
$variable_de_votre_choix[]['temps'] = easy_timer('blablabla');

Ensuite, dans votre cadre où vous souhaitez afficher vos données
foreach($variable_de_votre_choix as $key => $value)
{
echo 'Temps d\'exécution de '.$variable_de_votre_choix[$key]['texte'].' : '.$variable_de_votre_choix[$key]['texte'].' ms.<br />';
}

Bonne journée.

A voir également

Ajouter un commentaire

Commentaire

cs_gomoz
Messages postés
135
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
23 décembre 2009
-
Pas mal comme code. C'est peut-être seulement un peu dommage d'utiliser autant de variable globales.

Y a une raison particulière à ce que vous n'ayez pas choisi de faire un tableau associatif avec $GLOBALS['le_nom_unique_du_plugin_timer'] plutot qu'une multitude de define() ?

Comme vous dites en commentaire, pour l'affichage, c'est quand même plus pratique mais peut-être que ce n'est pas possible ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.