2. Chi siamo
Luciano Colosio
SA & Dev @ Save The Mom
@unlucio
Michele Capra
Dev @ OrangeCode
@piccoloaiutante
3. Cosa vedremo oggi
Che cos’è Node.JS
Dove nasce
ContesB in cui usarlo
Il mondo asincrono
Demo Live
Deploy su un servizio free (Heroku)
4. Che cos’è Node.JS
Javascirpt runBme basato su V8
Event Driven I/O server-‐side
5. Da dove nasce
Riprodurre il comportamento in “push” mostrato da gmail
Superare i limit del one-‐way
BONUS DERIVATO
Le caraUerisBche asincrone di JS permeUono una gesBone piu’
comoda dell’I/O che costa molto
6. Da dove nasce
Costo dell’ I/O
L1-‐cache 3 cicli
L2-‐cache 14 cicli
RAM 250 cicli
Disco 41x10^6 cicli
Network 240x10^6 cicli
7. Gestire le richieste
Sincrono: gesBsco una richiesta alla volta
Contro: ogni richiesta può (e fa!) da tappo alle altre
8. Gestire le richieste
Fork del processo
Un processo nuovo per ogni richiesta
Contro: non scala su migliaia di connessioni
(ameno di non usare migliaia di servers ;))
9. Gestire le richieste
Un Thread nuovo per ogni richiesta
Contro: la macchina potrebbe non avere
abbastanza thread disponibili,
programmazione concorrente è complessa,
problemi di memoria
10. Gestire le richieste
La scelta di node:
Singolo Thread
Niente parallelizzazione del codice
11. Event Loop
La logica nell’eventloop risulta bloccante:
Devo aUendere che i task terminino
12. Soluzione:
NON fare nulla nel maintherad
Tutte le chiamate di I/O sono gestite
come eventi asincroni, quindi non
bloccanti.
Utilizzare event driven development
13. Event loop
non e' necessario pre carrozzarsi per le
perfomarnces
(es: pre allocare thread per rispondere piu'
velocemente).
Minor spreco di memoria/risorse
Minor rischio che il server vada in oveload
14. Importante!
Rispondere velocemente al client delegando a task
attività che richiedono risorse ed i/o ad alta latenza
Il focus è sulla risposta nel minor tempo
possibile
15. Async VS Sync
// Good: write files asynchronously
fs.writeFile('message.txt', 'Hello Node', funcBon (err) {
console.log("It's saved and the server remains responsive!");
});
// BAD: write files synchronously
fs.writeFileSync('message.txt', 'Hello Node');
console.log("It's saved, but you just blocked ALL requests!");
16. Esempio Architettura
Database
Client Web Engine DB
User NODE
NODE
Disk
Mass storage
Logging facility
(big slow disk)
Le scritture dei logs non sono piu’ un problema!
18. Chi lo usa:
37signals
Ajax.org - Cloud9 IDE
eBay
Trello
Klout
Linkedin
Microsoft
Voxer
Yahoo!
https://github.com/joyent/node/wiki/Projects,-
Applications,-and-Companies-Using-Node
19. JS: V8 in Node
Stesso motore del browser ma:
tutto gira nell’Event Loop
non c’è DOM
non c’è JQuery che tenga
programmazione asincrona
36. Dove lo usano?
Linkedin usa node come middle layer tra i server di backend ed i
client mobile
Mobile client
NodeJs backend
instances server
Mobile Client
37. I 10 consigli per node.js
Evitare il codice sincorono
No socket polling!
Non usare node.js per servire asset staBci
Delegare il rendering al client
Usare gzip tra i vari componenB
Parallelizzare al piu’ possibile!
Se possibile: NO SESSIONS
Usare moduli binari anzicche’ in javascript
Usare javascript standard anzicche’ librerie faUe per i client
Tenere il codice piccolo e compaUo
39. Un po’ di spam ;)
hUp://nodejsconf.it
hUp://www.webdebs.org/
40. Cerco Dev
Save the Mom cerca sviluppatori da integrare nel
nostro team! :)
Skills:
Web
MobileWeb
Mobile applications
(iOS, wp7, android, balckberry)
Scrivi a:
lucio@savethemom.com