begin process at 2012 05 27 19:25:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > MULTIPLIEZ LES TIMERS SUR VOS SCRIPTS PHP ET BENCHEZ FACILEMENT VOS PAGES

MULTIPLIEZ LES TIMERS SUR VOS SCRIPTS PHP ET BENCHEZ FACILEMENT VOS PAGES


 Description

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

  • <?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;
  • }
  • }
  • ?>
<?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.


 Sources du même auteur

Source avec Zip DÉBUTANT : FONCTION POUR TRANSFORMER UN TEMPS EN SECONDES EN...

 Sources de la même categorie

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip Source avec une capture GENERATEUR D'ONGLET DE NAVIGATION PHP par pos123
FORMATER UN LIEN YOUTUBE, DAILYMOTION OU VIMEO POUR L'UTILIS... par kgb93
Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER par mtrix000

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PHP SYSTEM NOTATION - SCRIPT BENCHMARK par aKheNathOn
BENCHMARK SUR DES FONCTIONS par ZuGbEn
Source avec Zip Source avec une capture [PHP5] CLASSES DES BENCHMARK (GLOBAL ET ITERATE) AVEC CONSOL... par phoenix1789
PHP5 - CLASSE DE BENCHMARK par FhX

Commentaires et avis

Commentaire de gomoz le 01/09/2010 15:12:34

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 ?

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales