Testez les performances de votre site

 
Catégories du blog

Benchmark de vos scripts PHP avec FirePHP

Le lundi 26 avril 2010 dans Performances web et Scripts - Aucun commentaire

Avant d'optimiser vos scripts PHP, il faut d'abord repérer les principaux points d'engorgement de votre code. Pour cela, un système de benchmark permet de calculer le temps nécessaire à l'exécution d'un bloc d'instructions. Nous allons utiliser FirePHP qui est un plug-in de FireBug permettant d'afficher des messages depuis le code PHP directement dans votre navigateur.

Installer FireBug et FirePHP

Si vous ne connaissez pas FireBug, je vous conseille vivement de l'installer! Ce plug-in pour Firefox est une vraie mine de fonctionnalités et vous économisera beaucoup de temps si vous travaillez avec Javascript, CSS ou HTML.

Rendez-vous sur cette page pour l'installer dans Firefox : https://addons.mozilla.org/fr/firefox/addon/1843

Une fois installé, vous remarquerez un petit cafard dans la barre d'état en bas à droite de votre navigateur, cliquez dessus, FireBug s'ouvre :

Je ne rentrerai pas dans le détail de toutes les fonctionnalités de FireBug car je pourrai y consacrer une dizaine d'articles tellement cet outil est fantastique. L'étape suivante sera de télécharger le plug-in FirePHP à l'adresse suivante : http://www.firephp.org/.

Puis d'installer la librairie PHP de FirePHP qui nous permettra d'utiliser ses fonctions dans notre code PHP. Pour cela, vous pouvez soit télécharger la librairie depuis http://www.firephp.org/HQ/Install.htm, soit l'installer depuis PEAR :

pear channel-discover pear.firephp.org
pear install firephp/FirePHPCore

Comment utiliser FirePHP

Récupérez le fichier FirePHP.class.php et copiez-le dans le répertoire de vos scripts PHP. Puis insérez ce code au début de votre page :

<?php
require_once('FirePHPCore/FirePHP.class.php');
$firephp = FirePHP::getInstance(true);

$firephp->info("FirePHP fonctionne!");
?>

Ouvrez Firefox et lancez votre script PHP sans oublier d'activer FireBug et d'ouvrir l'onglet Console. Si tout s'est correctement déroulé, vous verrez ce message :

Vous pouvez ainsi afficher des erreurs, des groupes de messages, le contenu de variables et bien d'autres encore! Voici un aperçu des différents messages de FirePHP :

<?php
$firephp->info("info");
$firephp->log("log");
$firephp->warn('warn');
$firephp->error("error");

$firephp->group('Groupe de messages');
$firephp->log('message 1');
$firephp->log('message 2');
$firephp->groupEnd();

$firephp->trace('Infos de trace :');

$tableau = array("texte","cle" => "valeur",-5);
$firephp->log($tableau);
?>

Consultez la documentation de FirePHP pour découvrir toutes les autres fonctionnalités.

Benchmark de votre code PHP

Nous allons utiliser une classe pour gérer notre système de benchmark :

<?php
require_once('FirePHP.class.php');

class trace {
	
	private $nom;
	private $tick;
	private $firephp;

	public function __construct($nom) {
		$this->nom = $nom;
		$this->tick = microtime(true);
		$this->firephp = FirePHP::getInstance(true);
	}
	
	public function trace($libelle = "") {		
		$duree = round(microtime(true) - $this->tick,3);
		$this->tick = microtime(true);		
		$this->firephp->log("[".$this->nom."] ".$libelle." : ".$duree."s");
	}
	
} 
?>

Le constructeur initialise la variable de temps tick ainsi que le plug-in FirePHP, il est possible de lui donner un nom pour le repérer par la suite dans FireBug.

La fonction trace sera appelée après chaque bloc d'instructions PHP pour connaître le temps d'exécution depuis le dernier appel à trace ou au constructeur.
Voici un exemple d'utilisation :

<?php
include_once("trace.class.php");
$trace = new Trace("Test");

sleep(2);
$trace->trace("Sleep");

for ($i = 0;$i<1000000;$i++);
$trace->trace("Boucle");
?>

Avec cette classe et après avoir placé le benchmark tout au long de votre code PHP, vous pourrez facilement détecter quels sont les blocs de code qui freinent l'affichage de votre page et de l'optimiser le cas échéant.

Ajoutez un commentaire :
Anti spam