Node.js – Serverside Javascript Maciej Jastrzębski Kraków, 8 października 2011 nazwisko
Czym jest Node.js Into the code Asynchroniczne I/O i Event Driven server Wydajność?! Node.js vs obecne rozwiązania
PaaS SaaS IaaS Client side cross-platform & cross-device Client side PaaS SaaS Kim jestem czym się zajmuje w kontekcie nowego onetu +Rysunek chmury +Amazon +Standardy +od 2012 – ruszamy +server brzegowy IaaS
PaaS SaaS IaaS Client side cross-platform & cross-device Client side PaaS SaaS Kim jestem czym się zajmuje w kontekcie nowego onetu +Rysunek chmury +Amazon +Standardy +od 2012 – ruszamy +server brzegowy IaaS
Czym jest Node.js? Wprowadzenie do node.js co to jest Opensource Kiedy ruszyl projekt – 2009 Ryan Dahl Bazuje na Google v8 CommonJs Moduły
Czym jest Node.js V8 Wprowadzenie do node.js co to jest Bazuje na Google v8 – wiecej o v8 i o wojnie silników (z czego mamy bonus w postaci predkosci) V8
V8 runtime (EcmaScript5) Event Driven i Asynchroniczne I/O Środowisko Node.js V8 runtime (EcmaScript5) Event Driven i Asynchroniczne I/O process zamiast window! System modułów i require (CommonJS) Zestaw modułów natywnych Wsparcie dla dodatków opartych o C/C++ Co dostajemy Brak Window!!!! – w tym DOM za to mamy process Require i moduły – idea CommonJS Moduły natywne
var content = fs.readFileSync('example.txt'); //asynchronicznie File system var fs = require('fs'); //synchronicznie var content = fs.readFileSync('example.txt'); //asynchronicznie fs.readFile('example.txt', function (err, data) { if (err) throw err; console.log(data); }); Przykład asynchroniczne io – filesystem Przykład modułu
Server var http = require('http'); var url = require('url'); var status = "none"; http.createServer(function (req, res) { //ustawiamy nowy status var params = url.parse(req.url, true); if(params.hasOwnProperty('set_status')){ status = params['set_status']; } //zwracamy aktualny status res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(status); }).listen(80, "127.0.0.1"); EventDriven IO - serverside
setTimeout – raz jeszcze. setTimeout(function(){ //pobierz dane z miejsca A }, 3000); //pobierz dane z miejsca B }, 8000); EventDriven IO - serverside
Nowy wymiar asynchroniczności Javascript. Asynchroniczność JS i środowisko backendowe Event driven programing Asynchroniczne IO Jeden wątek – podkreślić znaczenie Konkurencja Asynchroniczność ważniejsza niż kiedykolwiek - operacje blokujące - to jakby nagle w przeglądarce pojawiło się 1000 niezaleznych kursorów i wszystkie zaczeły klikać Nowy wymiar asynchroniczności Javascript.
Server Asynchroniczne I/O GET http://example.com/index.html Node.js Server Rysunek Kolejka Exec
Asynchroniczne I/O Node.js Server Rysunek Kolejka Exec
Asynchroniczne I/O Node.js Server Rysunek Kolejka Exec
Asynchroniczne I/O Node.js Server Rysunek Kolejka Exec
Asynchroniczne I/O HTTP/1.1 200 OK Node.js Server Rysunek Kolejka Exec
Asynchroniczne I/O Node.js Server Rysunek Kolejka Exec
Asynchroniczne I/O HTTP/1.1 200 OK Node.js Server Rysunek Kolejka Exec
Nowy wymiar asynchroniczności Javascript. to jakby nagle w przeglądarce pojawiło się 1000 niezaleznych kursorów i wszystkie zaczeły klikać
Wydajność! Wydajność – test/wykres Test – Strona z datą (apache php/ apache python/ node.js) Fibonacci (node 4sec, pypy 6sec, py 64sec, php 110sec)
Komercyjne zastosowanie i duże projekty. Node.js i Enterprise (krytyka) Abstrachowanie od samej składni JS i zastosowań w projektach wielo osobowych Brak kompleksowych rozwiązań jak np. dla J2EE Tylko podstawowe narzędzia do pracy z OS Średnia jakość api (subiektywne)
Ale… npmjs.org Ale Aktualnie w npmie mamy 4261 total packages W tym ciekawe z perspektywy frontend JSDOM czy node-yui Dodać logotypy!!!!
Blog: http://it.blog.onet.pl/ Zapraszamy! Blog: http://it.blog.onet.pl/ Blog Współpraca
Dziękuję za uwagę. hr