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 ?
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.
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.
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.
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.
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.
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