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

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/

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

Zapraszamy na DevMeetings

Wydajność NodeJS kontra reszta świata

Poznań 03.09.2011

noSQL - naturalny storage aplikacji JS

Warszawa 10.09.2011

Middle-End w oparciu o ServerSide JS

Kraków 24.09.2011
Copyright © DevCamp 2011