ChromePhpTimer : une extension à ChromePhp pour chronométrer vos scripts

Certains d’entre vous connaissent peut être déjà ChromePhp. C’est un outil très puissant pour les développeurs Php, qui permet d’afficher dans la console du navigateur des informations précieuses (variables, infos, objets…).

J’ai développé une petite extension qui permet de chronométrer le temps d’éxécution entre deux instructions :

<?php
/**
 * Created on 24 sept. 2013
 *
 * @author Stephane DEWITTE &;[email protected]>
 * 
 */
class myChromePhp extends ChromePhp
{
	protected function __construct()
	{
		parent::__construct();
	}
	public static function timer($level = 'log')
	{
		// we get microtime
		$timer = microtime(true);
		global $myChromePhp_timer;
		if(empty($myChromePhp_timer))
		{
			// there is no timer in var
			$output = 'Start at ' . $timer;
		}
		else
		{
			// there is already a timer in var
			$timing = $timer -  $myChromePhp_timer;
			$output = 'Next at +' . round($timing*1000,4) . ' ms';			
		}
		// we put the actuel timer in var
		$myChromePhp_timer = $timer;
		// we get debug informations
		$debug = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT,0);
		$output = $debug[0]['file'] . ' (' . $debug[0]['line'] . ') - ' . $output;	
		switch($level)
		{
			case 'log':
				self::log($output);
				break;
			case 'warn':
				self::warn($output);
				break;
			case 'error':
				self::error($output);
				break;
			default:
				self::log($output);
				break;
		}

	}
}
?>

L’usage en est très simple :

<php
require "ChromePhp.php" // la classe d'origine de ChromePHP
require "myChromePhp.php" // la classe ci dessus
myChromePhp::timer();
usleep(100);
myChromePhp::timer();
sleep(3);
myChromePhp::timer('warn');
sleep(1);
myChromePhp::timer('error');

On verra alors apparaitre dans la console du navigateur :

/home/steph/git/timer/www/test_login.php - (10) - Start at 1380016374.8343 log.js:137
/home/steph/git/timer/www/test_login.php - (12) - Next at +0.2952 ms log.js:137
/home/steph/git/timer/www/test_login.php - (14) - Next at +3000.221 ms log.js:137
/home/steph/git/timer/www/test_login.php - (16) - Next at +1000.3798 ms log.js:137

Chaque ligne de sortie indique le nom du fichier qui a appelé la fonction timer, avec le numéro de la ligne correspondante. La première ligne afficher un timestamp Unix, et chaque ligne suivante affiche en milliseconde le temps écoulé depuis le dernier appel de la fonction timer.
Vous pouvez passer en argument le niveau d’alerte de ChromePHP (log, warning, ou error).

Ce script vous permettra de détecter où sont les ralentissements dans votre code, ou de faire du benchmark.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.