web-dev-qa-db-fra.com

Quel est le système de modèles le plus rapide pour Python?

Jinja2 et Mako sont tous les deux apparemment assez rapides.

Comment cela se compare-t-il à (la moins présente mais probablement assez bonne pour ce que je fais) string.Template?

52
Josh Gibson

Voici les résultats des moteurs de modèles populaires pour le rendu d'un tableau HTML 10x1000.

Python 2.6.2 on a 3GHz Intel Core 2

Kid template                         696.89 ms
Kid template + cElementTree          649.88 ms
Genshi template + tag builder        431.01 ms
Genshi tag builder                   389.39 ms
Django template                      352.68 ms
Genshi template                      266.35 ms
ElementTree                          180.06 ms
cElementTree                         107.85 ms
StringIO                              41.48 ms
Jinja 2                               36.38 ms
Cheetah template                      34.66 ms
Mako Template                         29.06 ms
Spitfire template                     21.80 ms
Tenjin                                18.39 ms
Spitfire template -O1                 11.86 ms
cStringIO                              5.80 ms
Spitfire template -O3                  4.91 ms
Spitfire template -O2                  4.82 ms
generator concat                       4.06 ms
list concat                            3.99 ms
generator concat optimized             2.84 ms
list concat optimized                  2.62 ms

Le benchmark est basé sur code des tests de performance Spitfire avec quelques moteurs de modèle ajoutés et des itérations ajoutées pour augmenter la précision. La liste et le générateur concat à la fin sont codés à la main Python pour avoir une idée de la limite supérieure des performances réalisables en compilant en Python bytecode. Les versions optimisées utiliser l'interpolation de chaînes dans la boucle interne.

Mais avant de manquer de changer de moteur de modèle, assurez-vous que cela compte. Vous devrez effectuer une mise en cache assez lourde et un code vraiment optimisé avant que les différences entre les moteurs de compilation ne commencent à avoir de l'importance. Pour la plupart des applications, de bonnes installations d'abstraction, la compatibilité avec les outils de conception, la familiarité et d'autres choses comptent beaucoup plus.

99
Ants Aasma

D'après les docs jinja2 , il semble que string.Template soit le plus rapide si c'est tout ce dont vous avez besoin.

Sans aucun doute, vous devriez essayer de supprimer autant de logique que possible des modèles. Mais les modèles sans logique signifient que vous devez faire tout le traitement dans le code qui est ennuyeux et stupide. Un moteur de modèle qui fait cela est livré avec Python et appelé string.Template. Livré sans boucles et si conditions et est de loin le moteur de modèle le plus rapide que vous pouvez obtenir pour Python.

10
Josh Gibson

Si vous pouvez lancer la mise en cache dans le mélange (comme memcached), choisissez en fonction des fonctionnalités et de la facilité d'utilisation plutôt que de l'optimisation.

J'utilise Mako parce que j'aime la syntaxe et les fonctionnalités. Heureusement, c'est aussi l'un des plus rapides.

3
Tony

En général, vous devrez effectuer un profilage pour répondre à cette question, car cela dépend de la façon dont vous utilisez les modèles et de leur utilisation.

string.Template est le plus rapide, mais tellement primitif qu'il peut difficilement être appelé un modèle dans le même souffle que les autres systèmes de modèles, car il ne fait que des remplacements de chaînes, et n'a pas de conditions ou de boucles, ce qui le rend assez inutile en pratique.

1
Lennart Regebro