Comparatif : Découverte des principaux moteurs de template en PHP

Smarty, phpBB2, TinyButStrong, VTemplate, ModeliXe
Image non disponible


précédentsommaire

VII. Conclusion

VII-A. Comparaison

Mes conclusions peuvent être subjectives, à vous de vous faire une idée.

Les bibliothèques

  Version comparée Qualité du code Syntaxe du gabarit Cache Écrit pour PHP Utilisé par Licence
Smarty 2.6.14 recommandations PEAR recommandations PEAR oui 4 cf. listeListe des sites utilisant Smarty LGPL
phpBB2 1.10.2.5 ok + commentaires commentaires HTML aucun 3 les forums phpBB2 GPL
TinyButStrong 3.2.0 pour PHP >= 5.0 homogène configurable oui 4 adapté 5 cf. listeListe des sites utilisant TinyButStrong LGPL
VTemplate 1.3.3 Base Edition médiocre peu configurable en théorie 4 inconnu GPL
ModeliXe 1.2.2 moyenne XML ou PEAR oui 4 compatible 5 inconnu LGPL

PEAR a défini des conventions de codageConventions de codage définies par le groupe PHP::PEAR.
Informations sur la license GPL : site officielGNU General Public License, WikipediaWikipedia : Licence publique générale GNU.
Informations sur la license LGPL : site officielGNU Lesser General Public License, wikipediaWikipedia : Licence publique générale limitée GNU.

Test de performances

J'ai entièrement refait les tests de performances des scripts depuis que j'ai publié ce comparatif pour la première fois.

Je vais décrire ici en détail ma méthode et fournir le script utilisé. Si vous obtenez des résultats différents, je vous serais reconnaissant de . De même, si ma méthode ne vous semble pas appropriée, merci de me le faire savoir.

J'utilise l'utilitaire Apache Bench (ab.exe), fourni en standard avec ma distribution d'Apache 2.0.59 et je tourne sous Windows.

Je doute que ma configuration système soit très utile mais la voici tout de même :
  • Système : Windows XP SP2 ;
  • Processeur : Intel Pentium M cadencé à 1300 MHz ;
  • RAM : 512 Mo ;
  • Apache : 2.0.59 ;
  • PHP : 5.2.1 (Zend Core 2.0).

Skrol 29 (TinyButStrong) m'ayant convaincu de l'inutilité de ma méthode antérieure, j'ai adapté les scripts de ce comparatif pour éviter d'utiliser la base de données. Toutes les données sont codées en dur dans le script db-connect.php et les appels à MySQL sont supprimés.

Ma démarche est constituée des actions suivantes :
  1. Supprimer les fichiers de log ;
  2. Vider les répertoires des fichiers de cache et de compilation des différents moteurs ;
  3. Récupérer des statistiques préliminaires (ab.exe) ;
  4. Calculer la moyenne pour chaque moteur ;
  5. Supprimer les quelques rapports erronés générés par Apache Bench ;
  6. Calculer les statistiques finales (le comparatif).

Les statistiques sont récupérées sur 5000 chargements consécutifs par Apache Bench, pour chaque moteur. L'ensemble des tests est fait 30 fois (c'est-à-dire 30 fois 5000 chargements de chaque script) afin d'obtenir une moyenne fiable. La valeur utilisée dans le rapport est le nombre de requêtes par seconde.

À la fin de l'exécution du script de test, une fois les rapports erronés supprimés, nous calculons l'écart entre le nombre de requêtes par seconde du script de référence et le nombre de requêtes par seconde de chaque autre script : résultat = (référence / moteur) * 100. Le nombre obtenu est un pourcentage : par exemple, "150%" signifie que le moteur considéré est parvenu à exécuter 50% de chargements de moins par seconde, par rapport au script de référence. Une autre manière de le comprendre est : "ce moteur met 150% du temps du script de référence pour effectuer le même nombre de chargements".

Fichiers du test de performances :
  • Le script PHP de génération des rapports [ FTP ] [ HTTP ] ;
  • Les rapports qui ont donné les résultats ci-dessous [ FTP ] [ HTTP ] ;
  • Le rapport final [ FTP ] [ HTTP ] ;
  • Les scripts modifiés [ FTP ] [ HTTP ].

Mon expérience avec ces bibliothèques (sans gestion du cache)

Voici un tableau récapitulatif de mon expérience avec ces moteurs de gabarits. Veuillez considérer que certaines réponses sont subjectives, et que la totalité des réponses découle de la comparaison que j'ai décrite dans les pages précédentes.

  Page produite Objectif Prise en main Flexibilité Configuration Performances / référence Débogage
Smarty oui non facile immédiate héritage 123 % facile
phpBB2 oui oui facile rapide aucune 189 % classique
TinyButStrong oui (sauf cache) non complexe immédiate héritage 245 % complexe
VTemplate ok (sauf cache) oui facile problématique héritage + constantes 184 % classique
ModeliXe ok oui facile malaisée héritage + constantes 168 % (PEAR) ou 191 % (XML) classique
Classement (décroissant) :
  1. Smarty ;
  2. ModeliXe ;
  3. phpBB2 / VTemplate ;
  4. TinyButStrong.

Leur gestion du cache

Voici un tableau récapitulatif de mon expérience avec ceux des moteurs de gabarits (de ma liste) qui proposent une gestion du cache.

  Adaptation au projet Performances / référence
Smarty immédiate 116 %
phpBB2 non prévu pour n/a
TinyButStrong malaisée 113 %
VTemplate après débogage 144 %
ModeliXe immédiate 117 % (PEAR) ou 114 % (XML)
Classement (décroissant) :
  1. ModeliXe / Smarty / TinyButStrong ;
  2. VTemplate.

VII-B. Classement (subjectif)

Le classement en fonction des performances ne me semble pas suffisant pour juger de ce type de bibliothèque.

Ces classements dépendent de mon interprétation des comparaisons précédentes : je ne saurais trop vous recommander de vous construire votre propre opinion !

Séparation entre la logique et la présentation (du plus au moins adapté) :
  1. phpBB2, VTemplate et ModeliXe n'ont aucun élément de programmation au sein du gabarit, ils se contentent de définir des zones à remplir, à répéter ou à ignorer ;
  2. Smarty et TinyButStrong optent pour des gabarits plus complexes afin de simplifier le code PHP.

Nous retrouvons ici les deux groupes évoqués en introduction : d'une part (en seconde position ici), les moteurs incorporant le point de fusion dans le gabarit et, d'autre part (en première position selon moi), ceux le laissant dans le code PHP.
Nous n'avons cependant pas de grand gagnant, il nous faut donc trouver un autre argument que la possibilité de séparation entre logique et présentation.

Simplicité de la syntaxe du gabarit (par ordre décroissant) :
  1. phpBB2 : Des commentaires HTML comportant les mots BEGIN et END ;
  2. VTemplate : Des commentaires HTML avec une touche de XML ;
  3. ModeliXe : Une adaptation de la syntaxe XML ;
  4. Smarty : Une nouvelle syntaxe fondée sur les accolades et comportant des éléments de programmation ;
  5. TinyButStrong : Une nouvelle syntaxe fondée sur les crochets et comportant des éléments de programmation.

VII-C. Épilogue

Je ne vous recommande pas la lecture de ce qui suit si vous n'avez pas étudié vous-même les différents moteurs.

Je rappelle ici l'objectif principal qui doit être atteint par un moteur de gabarits : permettre une séparation efficace du code source de présentation (par exemple HTML) et du code source de logique applicative (PHP).

Pour être honnête, un seul des cinq moteurs testés me semble convenable. Ce n'est bien sûr qu'un avis personnel et conditionné par ce que j'ai énoncé en introduction : chaque développeur devrait avoir son opinion sur ce sujet.

Smarty est le plus mature et le plus propre. Cependant, la syntaxe utilisée dans ses gabarits est tellement proche du langage PHP lui-même que la séparation logique/présentation est floue, voire inefficace. Je ne suis pas certain d'être d'accord avec le qualificatif de moteur de templates. Je ne dis pas que Smarty est inutile, mais plutôt qu'il n'est pas utile en tant que moteur de gabarits.

phpBB2 a le moteur le plus facile à utiliser mais il ne gère pas la mise en cache. Ce n'est pas un défaut, c'est simplement un avantage qu'il n'a pas.

TinyButStrong promet de grandes choses mais a dû faire des concessions pour accéder aux requêtes de ses utilisateurs, ce qui donne une classe très difficile à utiliser. TBS est de plus en plus "strong" mais de moins en moins "tiny". Par ailleurs, la syntaxe de son gabarit souffre du même inconvénient que celle de Smarty.

VTemplate utilise des gabarits à la syntaxe redondante et comporte des bugs de fonctionnement. C'est dommage car il est sur la bonne voie.

ModeliXe comporte des bugs de fonctionnement.

À choisir parmi ces moteurs, je prends celui de phpBB2. Il permet une séparation correcte entre la logique applicative et l'affichage, il est facile d'accès et il fonctionne bien. De plus, il est maintenu et utilisé par une communauté gigantesque.

Si vous utilisez l'un ou l'autre moteur dans vos sites, n'hésitez pas à nous le faire savoir et à nous donner vos impressions (cf. lien ci-dessous vers le débat sur nos forums), surtout si elles sont différentes de celles proposées ici !

VII-D. Téléchargement

Voici les scripts utilisés :
  • C:\Web\offline\shared\ (les bibliothèques) [ FTP ] [ HTTP ] ;
  • C:\Web\offline\sites\comparatifs\ (les classes personnalisées) [ FTP ] [ HTTP ] ;
  • C:\Web\online\comparatifs\templates\ (les scripts publics) [ FTP ] [ HTTP ] ;
  • Les scripts de création de la base de données [ FTP ] [ HTTP ].

VII-E. Liens


précédentsommaire

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2006 Guillaume Rossolini. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.