Blog Departamentu IT Onet.pl
„Zobaczmy to jeszcze raz” – Javascript i Node.js
Dla regularnego czytelnika naszego bloga nie będzie zaskoczeniem jeśli napiszę, że często ostatnio „mamy głowy w chmurach”, a mówiąc poważnie, sporo u nas ostatnio technologii Cloud i związanych z nią warstw IaaS, PaaS i SaaS. W kontekście tych dwóch ostatnich chciałbym dziś przedstawić technologię, z którą eksperymentujemy od ponad pół roku i dziś chyba mogę już powiedzieć, że będziemy jej używać – mowa o Node.js.
O tym rozwiązaniu jest dość głośno od pewnego czasu, a zainteresowanie zarówno developerów, jak i światowych gigantów (Yahoo!, Microsoft) wydaje się rosnąć z miesiąca na miesiąc. Dla mniej wtajemniczonych wyjaśnię, że Node.js to Server-Side Javascript – tak, teraz już możemy napisać server w javascripcie.
Projekt ten powstał w 2009 jako hobbistyczny OpenSource, a dziś jest już profesjonalnie rozwijany zarówno przez niemałą społeczność, jak i firmę Joyent, która jest obecnie właścicielem większości praw związanych z tą technologią. Node.js został zbudowany w oparciu o silnik javascript-u V8 (Google), więc możemy spodziewać się ciągłego wzrostu wydajności wraz z zaostrzaniem się rywalizacji na rynku przeglądarek internetowych. Jak widać jest to technologia z dość silnymi fundamentami – niemniej o co tyle szumu?
Javascript – choć wielu może kojarzyć się z prostym językiem do skryptowania stron WWW – udowodnił, że jest świetnym narzędziem tworzenia aplikacji sterowanych zdarzeniami (event-driven programming), których od lat używamy w naszych przeglądarkach generując miliony kliknięć, naciśnięć, przesunięć etc. Największą zaletą tego podejścia jest fakt, że aplikacje tego typu działają asynchronicznie – wszelka komunikacja z „światem zewnętrznym” nie zatrzymuje działania aplikacji do czasu uzyskania odpowiedzi – aplikacja działa nadal i dopiero gdy otrzyma odpowiedź zacznie ją przetwarzać. To proste podejście, które stało się podstawą sukcesu tzw. AJAX-a – jest teraz dostępne po stronie serwera.
Gdy zastanowimy się nad tym nieco głębiej oznacza to, że Node.js dostarcza nam podstawę serwera z asynchronicznym I/O. Tym samym proste wielokrotne odpytanie baz danych nie jest już sekwencją kolejnych operacji – teraz wykonujemy je równolegle redukując tym samym czas komunikacji do najdłużej wykonującego się zapytania. Jest to dopiero początek potencjału drzemiącego w tej technologii. W czasie, gdy czekamy na odpowiedzi z baz danych, czy innych usług nasz serwer może bez przeszkód przyjmować kolejne połączenia i obsługiwać żądania. Daje to dramatyczny wzrost wydajności – a przede wszystkim pełniejsze i bardziej ekonomiczne wykorzystanie zasobów.
Proste testy wydajnościowe obrazują z czym mamy do czynienia: „usługa zwracająca aktualną datę” – testowane na maszynie wirtualnej (zasoby 1GB RAM-u z jednym rdzeniem procesora Core2 Duo E7600 3GHz ) z zainstalowanymi serwerami: Node.js, Apache + PHP oraz Apache + Python. Test zakładał 10000 próbek przy stu jednoczesnych żądaniach.

Node.js obsługuje blisko 3900 r/s – dla porównania: PHP 430 r/s, Python 620 r/s.
Oczywiście, test ten nie oddaje całości zagadnienia, niemniej bardziej zaawansowane rozwiązania, nad którymi pracowaliśmy, również w testach wydajnościowych robią wrażenie np. dynamiczne (bez jakiegokolwiek cache-a) wygenerowanie pliku html o rozmiarze 25kb na podstawie szablonów – przy 100 jednoczesnych! żądaniach to blisko 40 r/s – znowu przytaczam tu wyniki przeciętnego komputera a nie maszyny serwerowej.
Node.js otwiera zupełnie nowy rozdział w życiu języka Javascript i chyba mogę zaryzykować stwierdzenie, że także w szeroko pojętym świecie usług. Potencjał tego rozwiązania i mnogości jego zastosowań dobrze obrazuje lista dostępnych już modułów. Nie bez znaczenia jest także to, iż Yahoo! dba by kolejne wcielenia YUI również współpracowały z Node.js. Osobiście wierzę, że technologia ta zostanie z nami dłużej pozwalając tworzyć szybsze, bardziej interaktywne i w pełni dynamiczne produkty.
Maciej Jastrzębski
projektant systemów informatycznych
Powiązane notki:
| Drukuj artykuł | Ten wpis został napisany przez IT@Onet na 14.09.2011 o 08:00, i jest w kategorii DreamLab. Podążaj za odpowiedziami do tego wpisu przez RSS 2.0. Możesz napisać komentarz, lub trackbacka z Twojej własnej strony. |

około 8 miesiące temu
Według mnie node.js jest chwilową modą. To co JavaScript oferuje jeżeli chodzi o składnię nie wydaje się zbyt pociągające, oczywiście oprócz łatwości tworzenia funkcji anonimowych. Tego typu porównania, jak przedstawione tutaj wprowadzają więcej wątpliwości, niż prawdziwej wiedzy. Dość enigmatyczne jest określenie Python + Apache. Można się spytać jak na tym tle wypada Tornado czy Twisted z Pythona? To są również nieblokujące serwery. Ruby również posiada takowy serwer. Można spojrzeć na inne rozwiązania: http://snapframework.com/blog/2010/11/17/snap-0.3-benchmarks
Haskell niesie ze sobą ogromną przewagę jeżeli chodzi o składnię, która nie była tworzona ot tak. Może być równocześnie kompilowany jak i interpretowany. Jedyny problem z Haskellem jest taki, że trzeba go się nauczyć. Co również jest bardzo ważne to to, że Haskell potrafi wykorzystać wiele rdzeni procesora. Node.js chodzi tylko w jednym procesie.
Dlatego uważam, że takie jednostronne podchodzenie do tematu i wychwalanie node.js jest nieuzasadnione.
około 8 miesiące temu
Możliwe, że jest tak, jak piszesz, choć z drugiej strony wielcy tego świata widzą w nim przyszłość. JS nie do wszystkiego się nadaje, ale do tworzenia serwisów jest całkiem niezły. My ciągle traktujemy go jako eksperyment, cały backend naszych serwisów powstaje w Pyhtonie.
Racja – porównanie jest kontrowersyjne z założenia, bo Tornado jest sporo wydajniejsze niż Apache, jednak ciągle NodeJS wypada lepiej. Odsyłam do innych testów, np: link.
Erlang jest jeszcze szybszy, ale co z tego, skoro mało jest specjalistów mogących coś w nim zaprogramować?
około 4 miesiące temu
@Cezary: Haskella trzeba się nauczyć. A JavaScriptu nie? Jeśli piszesz tylko o składni (która Cię odpycha) i jako jedyną zaletę wymieniasz łatwość tworzenia funkcji anonimowych, to znaczy, że praktycznie nic o tym języku nie wiesz. Jak mawiają filozofowie – wygląd to nie wszystko – liczą się wnętrzności. Ile czasu spędziłeś z JavaScriptem, żeby go tak oceniać?
JavaScriptu trzeba nauczyć się tak jak każdego innego języka. I ci którzy już do niego zasiadają przyznają najczęściej, że jest dziwny, ale koncepcje w nim zawarte są bardzo ciekawe.
Node.JS może i jest modą, czas pokaże. Na pewno ma jednak swoje zalety i warto im poświęcić trochę czasu, choćby dla poszerzenia horyzontów.