Framework

POptimizer

Table des matières
POptimizer (pour PHP Optimizer) est un optimiseur de code source en PHP distribué sous licence GNU/GPL. Cet outil a été développé par l'équipe de développement du noyau de PHPBoost afin d'améliorer ses performances.

Optimiser, pourquoi ? comment ?



PHP, un langage de script interprété



Bien que la plupart des cas d'utilisation de PHP n'utilisent pas le fait que ce soit un langage de script, il faut tout de même le garder à l'esprit. Contrairement à un langage compilé comme C et C++ par exemple où le code est déjà compilé en langage machine et donc directement exécutable, l'exécution d'une application écrite en langage de script se fait à chaque fois directement à partir du code source. Ainsi, par exemple sur PHPBoost, lorsqu'une page est générée, tous les fichiers source utilisés sont ouverts, lus, interprétés puis ensuite exécutés là où avec un langage compilé l'ordinateur n'aurait qu'à exécuter le fichier. La lecture et l'interprétation de chaque fichier source sont certes très optimisées, mais elles prennent un temps non négligeable.

L'enjeu



Un fichier source contient de nombreux caractères inutiles pour l'interpréteur



Les fichiers source d'une application écrite en PHP contient souvent un grand nombre de caractères qui sont ignorés lors de l'interprétation des fichiers (espaces blancs, caractères...).
Pourtant ces caractères inutiles ont une importance très grande pour le développeur. Par exemple, les commentaires sont totalement ignorés par l'interpréteur mais sont indispensables pour avoir un code clair et lisible que tout le monde puisse comprendre. De même, on met en forme les fichiers source de façon à faciliter leur lisibilité, souvent grâce à l'insertion d'espaces pour aérer le code (indentation).

Exemple de codes équivalents



Prenons un exemple de code aéré et bien commenté.
Code PHP :
<?php
/**
 * @desc Une classe d'exemple
 * @author Développeur <[email protected]>
*/
class Personne
{
     /**
      * @desc Construit un personnage
      * @param $nom_personne Nom de la personne
     */
    function Personne($nom_personne)
    {
        $this->nom = $nom_personne;
    }
 
     /**
      * @desc Dit bonjour à quelqu'un
      * @param string $personne nom de la personne à qui dire bonjour
     */
    function dire_bonjour($personne)
    {
        echo $this->nom . ' dit bonjour à ' . $personne;
    }
 
     /**
      * string Nom de la personne
     */
     var $personne = '';
}
 
//Instanciation de la classe
$une_personne = new Personne('Jean');
 
//On dit bonjour
$une_personne->dire_bonjour('Pierre');
?>

Ce code est strictement identique au suivant vis-à-vis de l'interpréteur PHP.
Code PHP :
<?php
class Personne
{
function Personne($nom_personne)
{
$this->nom=$nom_personne;
}
function dire_bonjour($personne)
{
echo $this->nom.' dit bonjour à '.$personne;
}
var $personne='';
}
$une_personne=new Personne('Jean');
$une_personne->dire_bonjour('Pierre');
?>

On pourrait même le réduire davantage en supprimant les sauts de ligne mais après l'exemple devient complètement illisible.

Ces deux codes donnent exactement le même résultat lors de leur exécution. Pourtant, le premier contient 771 caractères alors que le deuxième en compte seulement 280. Sur cet exemple, on voit donc qu'il y a plus de la moitié des caractères qui n'ont aucun sens pour l'interpréteur PHP. Il parait donc assez évident que la lecture des fichiers sources est plus rapide.

Le but de POptimizer



POptimizer permet de supprimer automatiquement une très grande majorité des caractères illisibles de façon à diminuer considérablement le nombre de caractères des fichiers source. Il transforme les fichiers source de la même manière que ce qui a été présenté dans l'exemple ci-dessus. Tous les commentaires du fichier sont supprimés, ainsi que toutes les indentations et les espaces inutiles entre les opérateurs du langage. Seuls les retours à la ligne sont conservés, pour une raison très simple, cela permet de conserver les numéros de ligne. Cela n'a donc aucune conséquence sur la maintenance du code, puisqu'un patch qui indique de modifier une certaine ligne sera également applicable sans difficultés.

Bien sûr POptimizer fait une copie des fichiers et ne les remplace pas brutalement. En fait, POptimizer s'utilise lorsqu'on veut mettre le code en production, au moment de l'export. Il est évident que l'objectif n'est pas d'écrire les fichiers sans commentaire et sans mise en forme, mais juste de déployer une application plus optimisée.

Téléchargement de POptimizer



L'exécutable



L'exécutable de POptimizer est téléchargeable ici.
Vous obtenez un fichier nommé poptimizer.jar que vous ne devez pas exécuter directement en cliquant dessus mais en le lançant en ligne de commande. Voir le paragraphe suivant pour savoir comment l'exécuter.

Le code source



Le code source est distribué sous licence GNU/GPL. Vous pouvez le consulter ici et le télécharger à partir du SVN de développement à l'adresse suivante :
http://phpboost.googlecode.com/svn/tools/POptimizer/
.

Utilisation de POptimizer



POptimizer est écrit en Java, il nécessite d'avoir une machine virtuelle Java installée sur sa machine pour pouvoir l'exécuter. Si ce n'est pas votre cas, vous pouvez télécharger Java ici ou si vous êtes sur Linux l'installer avec votre gestionnaire de paquets comme décrit ici pour Ubuntu.

POptimizer s'exécute en ligne de commande. Il se lance en tapant la commande suivant en invite de commande. La commande est évidemment à adapter en fonction de là où vous vous trouvez dans votre arborescence de fichiers ainsi que du nom de l'exécutable (nommé poptimizer.jar lorsque vous le téléchargez).
Code BASH :
java -jar poptimizer.jar


Le choix des fichiers à optimiser, du répertoire cible ainsi que de toutes les options permettant d'optimiser un projet PHP sont détaillées dans l'article dédié. L'option
-h
vous permettra également d'obtenir de l'aide en l'appelant comme ceci :
Code BASH :
java -jar poptimizer.jar -h
Cette page a été vue 2455 fois