Testy systemów generowania szablonów
Testowanie wydajności systemów generowania widoku pozwala sprawdzić frameworki w warunkach zgodnych z ich rzeczywistym przeznaczeniem. Generowany przez skrypty plik HTML był tabelą z 12 tysiącami wierszy oraz trzema kolumnami, jego rozmiar na wyjściu to 0,5 MB. Dane do tabeli nie były pobierane z bazy danych, osadzono je bezpośrednio w kodzie.
Metodologia testu: 50 równoległych połączeń i sprawdzanie ile odpowiedzi wygenerował serwer w czasie 100 sekund. Ruch symulowano narzędziem siege:
siege -c 50 -time=100s [URL]
Wyniki
| Technologia | System szablonów | Serwer | Liczba odpowiedzi |
|---|---|---|---|
| Node | express.io | node | 360 |
| Node | EJS | node | 288 |
| Node | konkatenacja stringów | node | 1698 |
| PHP APC | konkatenacja stringów | Apache | 1269 |
| PHP APC | Silex | Apache | 246 |
| PHP APC | Kohana | Apache | 1024 |
| PHP APC | DooPHP | Apache | 1239 |
| Perl | konkatenacja stringów | Apache | 583 |
| V8CGI | API_Template | Apache | 850 |
| Sinatra | ERB | WEBrick | 282 (17% timeouts) |
| Sinatra | ERB | nginx | 1274 |
| Java | Freemarker | Jetty | 1516 |
| ringoJS | Mustache | Jetty | 0 |
| Django | wbudowany | Apache | 0 |
| statyczny HTML | - | nginx | 6763 |
| statyczny HTML | - | Apache | 3020 |
Tabela 1. Liczba odpowiedzi z serwera w czasie 100 sekund (im więcej tym lepiej).
Wykres 1. Liczba odpowiedzi z serwera w czasie 100 sekund (im więcej tym lepiej).
Wnioski
Zwycięzcą z pośród rozwiązań nie korzystających z frameworków do generowania szablonów okazało się V8, a konkretnie Node.JS. Musimy jednak pamiętać, że użycie popularnych w świecie Node.JS modułów express.io czy EJS powoduje ok. sześciokrotny spadek wydajności.
Warto zauważyć, że konkurencyjny dla Node.js V8CGI nie został aż w takim stopniu spowolniony przez niedopracowane moduły zewnętrze gdyż korzysta z wbudowanego systemu szablonów.
W celach poglądowych w tabeli umieściliśmy również wyniki jakie uzyskał Apache oraz nginx serwując statyczne pliki.
singles,
Radosław Benkel
Twitter: @singlespl
http://blog.rbenkel.me
Szymon Ulewicz
http://www.coderoller.org
Dodaj komentarz
Serwer testowy
Sprzęt:
- CPU: Intel(R) Atom(TM) CPU D525 @1.80GHz, cache 512KB, cores: 4
- SATA controller: Intel 82801GR/GH (ICH7 Family) SATA AHCI Controller,
- HDD: WDC WD5000BEVT-2
- Memory: 2GB
Oprogramownie:
- System: Ubuntu 11.04, 64-bit, 2.6.38-8-server
- PHP 5.3.5-1ubuntu7.2 with Suhosin-Patch (cli) (built: May 2 2011 23:00:17)
- Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
- Node: 0.4.8
- Mysql server version: 5.1.54-1ubuntu4

Komentarze
1
Zeit napisał/a 16.07.2011 o 15:04
Przydały by się źródła na których przeprowadzane były testy :)
2
DevMeetings.pl napisał/a 16.07.2011 o 15:12
Zeit: dobry pomysł, zastanawiamy się tylko nad najlepszą formą udostępniania tego kodu. Daj nam na to kilka dni.
3
Galuszkak napisał/a 16.07.2011 o 17:34
Widzę, że w tabelce jest Django a w arkuszu w filmiku go nie ma ani na wizualizacji wyników. Mogę przygotować test a ktoś go odpali na tej samej maszynie. Bo obecnie krzywdzi Django, że na 100 s ani jednej wygenerowanej strony i takie coś aż razi, a w Django można podpiąć różne systemy templaetów Jinja, Mako itd.
4
singles napisał/a 16.07.2011 o 17:45
@Galuszkak - zauważ, że Django opalany był z poziomu Apache'a a nie wbudowanego serwera developeskiego (gdzie sam manual mówi, żeby nie używać go produkcyjnie). Może błąd w konfiguracji, nie jestem w stanie powiedzieć - nie wykluczam. Mam nadzieję, że Wiktor, który sprawdzał Django się wypowie :)
5
Galuszkak napisał/a 17.07.2011 o 04:27
@singles - Tu zostaje dalej wiele pytań, w czym był odpalany na tym Apache, mod_wsgi? mod_python? mod_fcgi? Prawdopodobnie różny preformance jest na różnych modułach.
Mi się wydawało tylko, że na filmiku nie ma w zestawieniu tego nieszczęśliwego Django. Generalnie, nie wydaje mi się, że przez 100s ani jednego response-a ;). Po prostu wynik byłby ciekawy w porównaniu do node.js/PHP.
6
@Galuszkak napisał/a 17.07.2011 o 08:57
Niestety, nie jestem w stanie udzielić Ci informacji na temat tego, jaki to był moduł. Na filmiku nie było Django, doszło w ostatniej chwili.
7
Człowiek z Bekonu napisał/a 19.07.2011 o 08:19
To był mod_python.
8
@Człowiek z Bekonu napisał/a 20.07.2011 o 08:36
To niezbyt fortunnie bo Django zrzuciło support mod_python (nie rozwijany od 3 lat conajmniej... i fundacja Apache zamierza wyrzucić mod_python z repozytoriów)
https://docs.djangoproject.com/en/dev/releases/1.3/#mod-python-support
Wszystkie siły idą teraz na mod_wsgi :)
9
Latisha napisał/a 29.09.2011 o 02:12
What a neat article. I had no inlikng.
10
lrytbm napisał/a 29.09.2011 o 17:28
gGpJAt upnzeggadtpo
11
vplxfjz napisał/a 30.09.2011 o 15:12
z1odrx , [url=http://linrlcuxzway.com/]linrlcuxzway[/url], [link=http://oublxxaopyju.com/]oublxxaopyju[/link], http://xbyrjwhugdtm.com/