Was ist das schnellste Template-System für Python?
-
19-09-2019 - |
Frage
Jinja2 und Mako sind beide anscheinend ziemlich schnell.
Wie diese zu vergleichen, um (die weniger vorgestellten, aber wahrscheinlich gut genug für das, was ich tue) string.Template?
Lösung
Hier sind die Ergebnisse des beliebten Template-Engines zum Rendern eine 10x1000 HTML-Tabelle.
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
Die Benchmark basiert auf Code von Spitfire Leistungstests mit einigem zusätzlichen Template-Engines und hinzugefügt Iterationen Genauigkeit zu erhöhen. Die Liste und Generator concat am Ende ist Hand Python codiert durch Kompilieren zu Python-Bytecode ein Gefühl für die obere Grenze der Leistung erreichbar zu erhalten. Die optimierten Versionen verwenden String-Interpolation in der inneren Schleife.
Aber bevor Sie laufen Ihre Template-Engine zu wechseln, stellen Sie sicher, zählt es. Sie müssen ein paar ziemlich schweres Caching und wirklich optimierten Code zu tun, bevor die Unterschiede zwischen der Kompilierung Template-Engines zu Materie beginnen. Für die meisten Anwendungen gut Abstraktion Einrichtungen, die Kompatibilität mit Design-Tool, Vertrautheit und anderen Dingen Materie vieles mehr.
Andere Tipps
Von der jinja2 docs , scheint es, dass string.Template die schnellste Wenn das ist alles was Sie brauchen.
Ohne Zweifel sollten Sie versuchen, Entfernen Sie so viel Logik von Vorlagen als möglich. Aber Vorlagen ohne Logik bedeutet, dass Sie alle zu tun haben Verarbeitung in dem Code, der langweilig und dumm. Eine Template-Engine, dass ist, dass mit Python ausgeliefert und genannt string.Template. kommt ohne Schleifen und wenn die Bedingungen und ist bei weitem Template-Engine die schnellste können Sie erhalten für Python.
Wenn Sie Caching in der Mischung (wie Memcached), dann wählt basierend auf Funktionen und einfache Bedienung anstatter Optimierung werfen können.
Ich benutze Mako, weil ich wie die Syntax und Funktionen. Zum Glück ist es eine der am schnellsten als auch.
In der Regel werden Sie Profilierungs zu tun haben, diese Frage zu beantworten, da es davon abhängt, wie Sie die Vorlagen verwenden und wofür.
string.Template ist die schnellste, aber so primitiv, es kann kaum eine Vorlage im gleichen Atemzug wie die anderen Templating-Systeme bezeichnet werden, da es nur String Ersatz der Fall ist, und hat keine Bedingungen oder Schleifen, es ist ziemlich nutzlos in der Praxis machen .
Ich denke, Cheetah könnte die schnellsten sein, wie es in C implementiert wird.