Smarty : Petits défauts d’un moteur de template archi connu

Cela fait des années que j’utilise Smarty (j’y ai même participé à un moment avec le guru du programme, Messju). Je l’utilise dorénavant quasi quotidiennement dans tous les programmes professionnels que je réalise. Je pense pouvoir dire aujourd’hui que j’en connais (pratiquement) toutes les subtilités. Toutefois, Smarty n’est pas exempt de défauts. Voici pour moi les principaux.

* Il n’a pas été conçu « objet » dès le départ (c’est prévu pour la prochaine version majeure), ce qui fait utiliser énormément de tableaux. Certes, les tableaux sont plus efficaces niveau ressource, mais gérer des objets est tellement puissant qu’on se dit qu’on peut mettre les quelques milisecondes de perdues en execution de côté 😉 Par contre cela pose un réel problème côté « template » * Jusqu’à récemment, il ne passait pas le passage en error_reporting (E_ALL), c’est à dire l’affichage des notices (variables non déclarées principalement). * Le nom des fichiers de templates compilés, ou le nom des fichiers de cache (identique, mais pas dans le même répertoire) est assez folklorique. C’est sûr qu’on a pas envie d’aller chercher le fichier à la main au milieu de l’arborescence créée ! * Il y a eu un effort de séparation du code, pour que l’utilisation d’un fichier en cache ne demande pas le parcours de toute la librairie PHP mais de juste les fonctions nécessaires. Toutefois, je pense qu’on peut encore mieux faire de ce côté là. * Pour la concaténation ou le calcul mathématique dans les templates, c’est pas forcément très facile, même si là encore de gros efforts ont été fournis dernièrement. * De même pour l’utilisation d’objets ou de méthodes d’objets dans les templates; Smarty a tendance a s’emmêler les pinceaux (ou plutôt son utilisateur !). Je n’ai fait qu’aborder les soucis que posent Smarty. Ce système a également d’énormes avantages que je n’ai pas décrit ici 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *