Vous êtes nombreux à avoir été surpris par les résultats de Smarty, présentés dans l'étude sur les principales solutions de Templates. Smarty était globalement la (mauvaise) surprise de ces mesures.

Andreï Zmievski (l'auteur à l'origine de Smarty mais aussi de PHP-GTK) et moi même avons donc tenté d'en comprendre l'origine.

En premier lieu, Andreï aurait voulu que les scripts soient testés avec une solution de cache d'opcode, genre php Accelerator, APC, and so on. Ces solutions se montrent souvent très intéressantes avec des scripts très longs et complexes (la classe Smarty fait plus de 1.200 lignes de code...). Mais sur ce point je diverge. L'objet de ce bench étant bien de mesurer les performances brutes de ces solutions de templates. Et pas autre chose. Donc, négatif sur ce point là, je manque clairement de motivation :)

Par contre, il m'a vivement conseillé d'utiliser une méthode (de la classe Smarty) que j'avoue ne pas avoir utilisé durant nos tests initiaux : is_cached(), que certains connaissent déjà certainement.

De son coté, il s'est également plongé plus en détail dans les imbrications des méthodes display() et fetch() afin d'affiner son code.

Total, les résultats sont au rendez-vous et Smarty surpasse maintenant les autres solutions testées.

On peut tirer un certains nombres de conclusions de ceci :

• nul n'est infaillible même si nous aurions préféré obtenir le paramètrage optimale dès le début.

• preuve, une fois encore, que paramétrer et affiner une solution de template, qui plus est complexe, n'est pas chose simple.

• cette étude aura peut-être contribuée à améliorer Smarty en invitant Andreï a en optimiser une partie du code.

Je tenterais de publier une v1.2 de l'étude dans le courant de la semaine prochaine. Je manque malheuresement de temps :(

En attendant, et pour se fixer les idées, Smarty v1.4.5 (la version que nous avons testée) permet d'obtenir suite à l'utilisation judicieuse de is_cached() :

• ~ 44 Req/s pour le script A
• ~ 43 Req/s pour le script B
• ~ 36 Req/s pour le script C
• ~ 44 Req/s pour le script D

Ce sont ici les meilleurs taux observés.

Ces performances augmentent encore avec les dernières versions en cours de développement et sur lesquelles Andreï travaille actuellement. Nous les avons testées (à partir d'un noyaux Smarty v 1.5.2 relooké) afin d'aider Andreï à confirmer ses suppositions. Le gain n'est pas énorme, mais il est réel.

Je tenais tout de même à préciser ce point dès à présent, en attendant de publier une mise à jour de l'étude.

Restez en ligne...