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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top