Node.JS je open-source multiplatformní javascriptové run-time prostředí, které vykonává (překvapivě javascriptový) kód na serverové straně (server-side). Node.JS je postaveno na V8 Javascriptovém enginu (od Google Chromu). Využívá událostmi řízenou architekturu (EDA - z anglického Event driven architecture) a non-blocking I/O model, díky čemuž je tak efektivní.
EDA - Event-driven architecture
Česky událostmi řízená architektura. Vše si můžeme porovnat na :
PHP
- představitel dávkově orinetované architektury
- program obdrží jeden úkol, splní ho a vykonává další
Node.JS
- představitel EDA - architektury řízené událostmi
- může současně otvírat soubor a zároveň s ním pracovat (asynchronně)
Příklad
Představte si, že se usadíte v restauraci, dostanete ukrutnou chuť na pečenou husu. Postarší pán u vedlejšího stolu ale také dostal (a opět ukrutnou:-) ) chuť na špagety:
Dávkově orientovaná architektura
Bude-li se číšník chovat na základě dávkově orientované architektury: Zeptá se prvního zákazníka. Starší muž si objedná špagety. Číšník objednávku nahlásí kuchaři a čeká, až budou špagety hotové. Přinese je na stůl a zeptá se Vás, co Vám může nabídnout. Uuuuuuuuuuuuuuffff! To byla doba!
Událostmi řízená architektura EDA
Bude-li se číšník chovat na základě architektury řízené událsotmi (EDA): Zeptá se chlapíka, který usedl ke stolu jako první. Na objednaných špagetách začne po vyřízení pracovat kuchař (=systém), číšník se mezitím vypraví k Vám. Tady to teda frčí. Díky za pohotovost, Pohlreichu!
Pokud bychom to chtěli převést do programu:
PHP - Dávkově orientovaná architektura
- Server pošle požadavek (request) o soubor (file) ze souborového systému (file system).
- Server počká, dokud systém neotevře a nepřečte soubor
- Server vrátí data klientovi.
- Server pošle požadavek na další soubor.
Node.JS - EDA
- Server pošle požadavek o soubor ze souborového systému
- Server pošle požadavek na další soubor
- Když systém otevře a přečte soubor, server vrátí dotaz klientovi
Multi-threadový nebo Single threadový
PHP a další back-endové frameworky pracují na multithreadovém přístupu (doslovně přeloženo více-vláknovém). Ten pracuje na principu multitaskingu a vykonává několik úkolů zároveň. To bohužel vyžaduje hodně paměti a zdrojů procesoru. Oproti tomu Node.JS představuje single-threadový přístup (ano, mohli bychom jej nazvat jako jeno-vláknový). Využívá Systémových událostí (System Events) k dosažení stejného výsledku pomocí non-blocking, asynchronního modelu.