Jaki jest najszybszy system szablonów dla Pythona?

Jinja2 i Mako są najwyraźniej dość szybcy.

Jak to porównać do (mniej wyróżnionych, ale chyba wystarczająco dobrych do tego, co robię) string.Szablon ?

Author: EBGreen, 2009-08-24

5 answers

Oto wyniki popularnych silników szablonów do renderowania tabeli 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

Benchmark opiera się na kodzie z testów wydajności Spitfire z dodanymi silnikami szablonów i dodanymi iteracjami w celu zwiększenia dokładności. Lista i generator concat na końcu są ręcznie kodowane w Pythonie, aby poznać górną granicę wydajności osiągalnej przez kompilację do bajtowego kodu Pythona. Wersje zoptymalizowane wykorzystują interpolację łańcuchów w wewnętrznej pętla.

Ale zanim skończy ci się przełączyć silnik szablonu, upewnij się, że ma to znaczenie. Będziesz musiał wykonać dość ciężkie buforowanie i naprawdę zoptymalizowany kod, zanim różnice między kompilującymi silnikami szablonów zaczną mieć znaczenie. Dla większości zastosowań dobre możliwości abstrakcji, kompatybilność z narzędziami projektowymi, znajomość i inne rzeczy mają znacznie więcej znaczenia.

 98
Author: Ants Aasma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-25 06:04:56

Z Jinja2 docs , wydaje się, że ciąg.Szablon jest najszybszy, jeśli to wszystko, czego potrzebujesz.

Bez wątpienia powinieneś spróbować Usuń tyle logiki z szablonów co możliwe. Ale szablony bez żadnych logika oznacza, że trzeba zrobić wszystkie przetwarzanie w kodzie, które jest nudne i głupi. Silnik szablonu, który czy to jest dostarczane z Pythonem i nazywa się string.Szablon. Przychodzi bez pętli i jeśli warunki i jest zdecydowanie najszybszy silnik szablonu możesz idź po Pythona.

 9
Author: Josh Gibson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-24 19:30:46

Jeśli możesz wrzucić buforowanie do miksu (jak memcached), wybierz w oparciu o funkcje i łatwość użycia, a nie optymalizację.

Używam Mako, ponieważ lubię składnię i funkcje. Na szczęście jest to również jeden z najszybszych.

 4
Author: Tony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-09 00:16:00

Ogólnie rzecz biorąc, będziesz musiał zrobić profilowanie, aby odpowiedzieć na to pytanie, ponieważ zależy to od tego, jak używasz szablonów i do czego.

String.Szablon jest najszybszy, ale tak prymitywny, że trudno go nazwać szablonem w tym samym oddechu, co inne systemy szablonów, ponieważ tylko zastępuje ciągi i nie ma warunków ani pętli, co czyni go całkiem bezużytecznym w praktyce.

 1
Author: Lennart Regebro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-24 20:19:22

Myślę, że gepard może być najszybszy, ponieważ jest zaimplementowany w C.

 -2
Author: Koen Bok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-25 00:29:17