Obsah
- Node.js
- Použitie
- Produkcia, kto to už používa
- node.js ecosystem
- npm
- grunt
- bower
- príklady
Node.js
- platforma postavená na Google V8 prostredí (Google chrome)
- tenká vrstva C++
- eventmi riadený model
- "non-blocking" I/O model
- jedno vlákno v event loop-e
event-driven - arch. zalozena na reagovani na event - v tomto pripade si mozme predstavit ako event
napriklad request od pouzivatela, tento request sa potom spracovava v callbacku
non-blocking I/O operácie ako prístup k db, alebo zápis na fs neblokujú vlákno, ale zaregistrujú
callback a ten sa spracuje až vtedy ked zadaná operácia skončí
blocking vs non-blocking
adapted from code school
blocking vs non-blocking
adapted from code school
Event loop
http://ageeknotes.com/
Na čo je vhodný?
- REST Api
- SPA
- Real time app (RabbitMQ)
Na čo je nevhodný?
- spracovanie obrazu, zvuku
- šifrovanie
- CPU náročné úlohy
LinkedIn
- Better performance, Node.js being up to 20x faster than Rails for certain scenarios
- Using only 3 servers instead of 30, leaving room for a 10x traffic growth
- Front-end JavaScript engineers could be used for back-end code, and the two teams were actually
merged into on
PayPal
- Double the requests per second vs. the Java application.
- 35% decrease in the average response time
Node.js ecosystém
- Komunita, (blogy, github, stackoverflow)
- npm repo
- Platform as a service (PaaS) (appfog, nodejistu, heroku atď)
- grunt
- bower
- ...
npm - Node Packaged Modules
online repo pre node.js projekty (moduly) https://www.npmjs.org/
nástroj pre príkazový riadok pre interakciu s modulom / projektom
npm - package.json
package.json je descriptor, ktorý musí byť pri každom module / projekte.
{
"name": "reveal.js",
"version": "2.6.2",
"dependencies": {},
"devDependencies": {}
}
npm - Node Packaged Modules
Grunt
The JavaScript Task Runner
- build app do produkcie
- sledovanie zmien a spúšťanie úloh po zmene
- využíva rôzne pluginy z npm
npm install -g grunt-cli
Bower
Bower is a package manager for the web
npm install -g bower
{
"name": "my-project",
"version": "1.0.0",
"main": "path/to/main.css",
"
"dependencies": {
},
"devDependencies": {
}
}
Zdroje
- https://www.codeschool.com/
- http://ageeknotes.com/