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.
- 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.
- Supprimer les fichiers de log ;
- Vider les répertoires des fichiers de cache et de compilation des différents moteurs ;
- Récupérer des statistiques préliminaires (ab.exe) ;
- Calculer la moyenne pour chaque moteur ;
- Supprimer les quelques rapports erronés générés par Apache Bench ;
- 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".
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 |
- Smarty ;
- ModeliXe ;
- phpBB2 / VTemplate ;
- 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) |
- ModeliXe / Smarty / TinyButStrong ;
- 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 !
- 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 ;
- 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.
- phpBB2 : Des commentaires HTML comportant les mots BEGIN et END ;
- VTemplate : Des commentaires HTML avec une touche de XML ;
- ModeliXe : Une adaptation de la syntaxe XML ;
- Smarty : Une nouvelle syntaxe fondée sur les accolades et comportant des éléments de programmation ;
- 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▲
VII-E. Liens▲
- Comparatif : Les systèmes de templates en PHPComparatif : Les systèmes de templates en PHP, par Hugo Étiévant ;
- Tutoriel : Le système de templates de phpBBTutoriel PHP : Le système de templates de phpBB, par Genova ;
- Formation : Tous nos cours sur les gabarits en PHPTous nos tutoriels sur les templates ;
- Débat sur nos forums : quel système de gabarits utilisez-vous ?Débat : Quelle solution de templates utilisez-vous en PHP ?