# Node.JS 1: Úvod do Node.JS

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 
1. Server pošle požadavek (request) o soubor (file) ze souborového systému (file system).
2. Server počká, dokud systém neotevře a nepřečte soubor
3. Server vrátí data klientovi.
4. Server pošle požadavek na další soubor.

## Node.JS - EDA
1. Server pošle požadavek o soubor ze souborového systému
2. Server pošle požadavek na další soubor
3. 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.




