NODE.JSUna breve introduzioneWednesday, May 22, 13
@unlucioCIAO! :)Wednesday, May 22, 13
INDICE DEL CORSOCORE• Introduzione su node• Installazione• Struttura base di un progetto• npm• Hands on: Esempi di funzion...
INDICE DEL CORSOEXPRESS• Installazione• Generazione di un progetto• Routes• Views• Middle wares• Sessions and Error Handli...
BenvenutiWednesday, May 22, 13
INDEX• Cos’e’ Node.js• Come e perche’ nasce• Async e NextTick• Esempi di architettura in cui usarloWednesday, May 22, 13
Node.js is a platform built on Chromes JavaScript runtime for easily building fast, scalable networkapplications. Node.js ...
RYAN DAHLnode.js creatoranno: 2009Wednesday, May 22, 13
RYAN DAHLStudente in MatematicaSi trasferisce in Sud AmericaIncontra un programmatore phpInizia a sviluppare siti ed “appl...
Il Web e’ lento!Per via di Java ;)Wednesday, May 22, 13
Il Web e’ lento!Per via di Java ;)Alcuni cominciano a lavorare per velocizzare RORWednesday, May 22, 13
Il Web e’ lento!Per via di Java ;)Alcuni cominciano a lavorare per velocizzare RORMa il problema risiede nell’intero stack...
Il Web e’ lento!Per via di Java ;)Alcuni cominciano a lavorare per velocizzare RORMa il problema risiede nell’intero stack...
MongrelPer via di Java ;)Wednesday, May 22, 13
MongrelPer via di Java ;)E’ sia una libreria http, sia un webserver!Wednesday, May 22, 13
MongrelPer via di Java ;)E’ sia una libreria http, sia un webserver!Il web server non e’ piu’ solo “una directory “Wednesd...
MongrelPer via di Java ;)E’ sia una libreria http, sia un webserver!Il web server non e’ piu’ solo “una directory “Puo’ ra...
Il Web ServerPer via di Java ;)Wednesday, May 22, 13
Il Web ServerPer via di Java ;)Distillato, e’ fatto per gestire richieste e risposteWednesday, May 22, 13
Il Web ServerPer via di Java ;)Distillato, e’ fatto per gestire richieste e risposteServire files e’ una parte ma non e’ ob...
THE FILE UPLOAD PROBLEMWednesday, May 22, 13
THE FILE UPLOAD PROBLEMCaricare files via http non era poi cosi’ comuneWednesday, May 22, 13
THE FILE UPLOAD PROBLEMCaricare files via http non era poi cosi’ comuneCon la nascita di Ajax si cominciavano a caricareVID...
THE FILE UPLOAD PROBLEMCaricare files via http non era poi cosi’ comuneCon la nascita di Ajax si cominciavano a caricareVID...
LA PROGRESS BARWednesday, May 22, 13
LA PROGRESS BARIl DOM non dava alcuna informazione sul fileWednesday, May 22, 13
LA PROGRESS BARIl DOM non dava alcuna informazione sul fileIl trucco era controllare lo stato del file lato server in batch....
LA PROGRESS BARIl DOM non dava alcuna informazione sul fileIl trucco era controllare lo stato del file lato server in batch....
LA PROGRESS BARIl DOM non dava alcuna informazione sul fileIl trucco era controllare lo stato del file lato server in batch....
IL LONG POLLINGWednesday, May 22, 13
IL LONG POLLINGNon piu’ continue richieste Ajax temporizzateWednesday, May 22, 13
IL LONG POLLINGNon piu’ continue richieste Ajax temporizzateIl Web Server non risponde e chiude subito la connessioneWedne...
IL LONG POLLINGNon piu’ continue richieste Ajax temporizzateIl Web Server non risponde e chiude subito la connessioneLa co...
IL LONG POLLINGNon piu’ continue richieste Ajax temporizzateIl Web Server non risponde e chiude subito la connessioneLa co...
IL WEB SERVER E’APPENADIVENTATO MOLTO PIU’INTELLIGENTE! :)Wednesday, May 22, 13
MA...Wednesday, May 22, 13
IL WEB E’ANCORA LENTO!Wednesday, May 22, 13
IL WEB E’ANCORA LENTO!Ruby, Python, ecc sono troppo lenti by designWednesday, May 22, 13
IL WEB E’ANCORA LENTO!Ruby, Python, ecc sono troppo lenti by designGli interpreti sono singoli thread bloccantiWednesday, ...
IL WEB E’ANCORA LENTO!Ruby, Python, ecc sono troppo lenti by designGli interpreti sono singoli thread bloccantiIl C e’ vel...
SI SPERIMENTA CON:Wednesday, May 22, 13
SI SPERIMENTA CON:RubyWednesday, May 22, 13
SI SPERIMENTA CON:RubyPythonWednesday, May 22, 13
SI SPERIMENTA CON:RubyPythonAskelWednesday, May 22, 13
L’OBIETTIVO:Wednesday, May 22, 13
L’OBIETTIVO:Costruire un sistema libero da lock!Wednesday, May 22, 13
LA RISPOSTA:Wednesday, May 22, 13
LA RISPOSTA:Tutto in un solo threadWednesday, May 22, 13
LA RISPOSTA:Tutto in un solo threadMigliora?Wednesday, May 22, 13
LA RISPOSTA:Tutto in un solo threadMigliora?SI! Si possono evitare tutti i problemi derivanti dai lock!Wednesday, May 22, 13
LA RISPOSTA:Tutto in un solo threadMigliora?SI! Si possono evitare tutti i problemi derivanti dai lock!C’e’ un linguaggio ...
JAVASCRIPTWednesday, May 22, 13
JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeWednesday, May 22, 13
JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Wednesday, ...
JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 er...
JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 er...
JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 er...
JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 er...
JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 er...
JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 er...
NASCE NODE.JSWednesday, May 22, 13
NASCE NODE.JSViene presentato alla javascript conf di BerlinoWednesday, May 22, 13
NASCE NODE.JSViene presentato alla javascript conf di BerlinoLa prima app di demo: un IRC Server, 400 linee di codice!Wedn...
NASCE NODE.JSViene presentato alla javascript conf di BerlinoLa prima app di demo: un IRC Server, 400 linee di codice!Ed e...
NASCE NODE.JSViene presentato alla javascript conf di BerlinoLa prima app di demo: un IRC Server, 400 linee di codice!Ed e...
NASCE NODE.JSViene presentato alla javascript conf di BerlinoLa prima app di demo: un IRC Server, 400 linee di codice!Ed e...
FATTI: IL COSTO DELL’I/O• cache L1: 3 cicli• cache L2: 14 cicli• RAM: 250 cicli• Disco: 41x10^6 cicli• Network: 240x10^6 c...
ASYNC E NEXTTICKWednesday, May 22, 13
ASYNC E NEXTTICKle applicazioni node girano in un singolo threadWednesday, May 22, 13
ASYNC E NEXTTICKLe applicazioni node girano in un singolo threadQuesto comporta che ad ogni dato momento viene eseguitosol...
ASYNC E NEXTTICKLe applicazioni node girano in un singolo threadQuesto comporta che ad ogni dato momento viene eseguitosol...
ASYNC E NEXTTICKLe applicazioni node girano in un singolo threadQuesto comporta che ad ogni dato momento viene eseguitosol...
ASYNC E NEXTTICKLe applicazioni node girano in un singolo threadQuesto comporta che ad ogni dato momento viene eseguitosol...
User NODENODEClient Web EngineDatabaseLogging facilityMass storage(big slow disk)DBDiskESEMPIO DI ARCHITETTURAIn questo mo...
backendserverMobile clientNodeJsinstancesMobile ClientESEMPIO: LINKEDINLinkedin usa node.js come middleware layer tra il b...
UN CASO COMPLESSOIl backend di SaveThe Mom e’ tutto in node.js e ne sfruttapesantemente il modello asincrono con l’aiuto d...
Upcoming SlideShare
Loading in...5
×

Introduzione a node: cenni storici ecc

248

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
248
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Introduzione a node: cenni storici ecc

  1. 1. NODE.JSUna breve introduzioneWednesday, May 22, 13
  2. 2. @unlucioCIAO! :)Wednesday, May 22, 13
  3. 3. INDICE DEL CORSOCORE• Introduzione su node• Installazione• Struttura base di un progetto• npm• Hands on: Esempi di funzionalita’ di base• Hands on: Esempi di piccole applicazioniWednesday, May 22, 13
  4. 4. INDICE DEL CORSOEXPRESS• Installazione• Generazione di un progetto• Routes• Views• Middle wares• Sessions and Error HandlingWednesday, May 22, 13
  5. 5. BenvenutiWednesday, May 22, 13
  6. 6. INDEX• Cos’e’ Node.js• Come e perche’ nasce• Async e NextTick• Esempi di architettura in cui usarloWednesday, May 22, 13
  7. 7. Node.js is a platform built on Chromes JavaScript runtime for easily building fast, scalable networkapplications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight andefficient, perfect for data-intensive real-time applications that run across distributed devices.CurrentVersion: v0.8.21Wednesday, May 22, 13
  8. 8. RYAN DAHLnode.js creatoranno: 2009Wednesday, May 22, 13
  9. 9. RYAN DAHLStudente in MatematicaSi trasferisce in Sud AmericaIncontra un programmatore phpInizia a sviluppare siti ed “applicazioni” webIncontra RORSi accorge che il Web e’ lento!Wednesday, May 22, 13
  10. 10. Il Web e’ lento!Per via di Java ;)Wednesday, May 22, 13
  11. 11. Il Web e’ lento!Per via di Java ;)Alcuni cominciano a lavorare per velocizzare RORWednesday, May 22, 13
  12. 12. Il Web e’ lento!Per via di Java ;)Alcuni cominciano a lavorare per velocizzare RORMa il problema risiede nell’intero stackWednesday, May 22, 13
  13. 13. Il Web e’ lento!Per via di Java ;)Alcuni cominciano a lavorare per velocizzare RORMa il problema risiede nell’intero stackIl lavoro di Zed Shaw da vita a MongelWednesday, May 22, 13
  14. 14. MongrelPer via di Java ;)Wednesday, May 22, 13
  15. 15. MongrelPer via di Java ;)E’ sia una libreria http, sia un webserver!Wednesday, May 22, 13
  16. 16. MongrelPer via di Java ;)E’ sia una libreria http, sia un webserver!Il web server non e’ piu’ solo “una directory “Wednesday, May 22, 13
  17. 17. MongrelPer via di Java ;)E’ sia una libreria http, sia un webserver!Il web server non e’ piu’ solo “una directory “Puo’ racchiudere direttamente la logicaWednesday, May 22, 13
  18. 18. Il Web ServerPer via di Java ;)Wednesday, May 22, 13
  19. 19. Il Web ServerPer via di Java ;)Distillato, e’ fatto per gestire richieste e risposteWednesday, May 22, 13
  20. 20. Il Web ServerPer via di Java ;)Distillato, e’ fatto per gestire richieste e risposteServire files e’ una parte ma non e’ obbligatoriaWednesday, May 22, 13
  21. 21. THE FILE UPLOAD PROBLEMWednesday, May 22, 13
  22. 22. THE FILE UPLOAD PROBLEMCaricare files via http non era poi cosi’ comuneWednesday, May 22, 13
  23. 23. THE FILE UPLOAD PROBLEMCaricare files via http non era poi cosi’ comuneCon la nascita di Ajax si cominciavano a caricareVIDEO!Wednesday, May 22, 13
  24. 24. THE FILE UPLOAD PROBLEMCaricare files via http non era poi cosi’ comuneCon la nascita di Ajax si cominciavano a caricareVIDEO!Ed ecco un nuovo problema da affrontare:Wednesday, May 22, 13
  25. 25. LA PROGRESS BARWednesday, May 22, 13
  26. 26. LA PROGRESS BARIl DOM non dava alcuna informazione sul fileWednesday, May 22, 13
  27. 27. LA PROGRESS BARIl DOM non dava alcuna informazione sul fileIl trucco era controllare lo stato del file lato server in batch.Wednesday, May 22, 13
  28. 28. LA PROGRESS BARIl DOM non dava alcuna informazione sul fileIl trucco era controllare lo stato del file lato server in batch.Ma l’http 1.1 ci da connessioni che possono restare aperte!Wednesday, May 22, 13
  29. 29. LA PROGRESS BARIl DOM non dava alcuna informazione sul fileIl trucco era controllare lo stato del file lato server in batch.Ma l’http 1.1 ci da connessioni che possono restare aperte!Nasce un interessante plugin per MongrelWednesday, May 22, 13
  30. 30. IL LONG POLLINGWednesday, May 22, 13
  31. 31. IL LONG POLLINGNon piu’ continue richieste Ajax temporizzateWednesday, May 22, 13
  32. 32. IL LONG POLLINGNon piu’ continue richieste Ajax temporizzateIl Web Server non risponde e chiude subito la connessioneWednesday, May 22, 13
  33. 33. IL LONG POLLINGNon piu’ continue richieste Ajax temporizzateIl Web Server non risponde e chiude subito la connessioneLa connessione resta aperta finche’ la si puo’ usareWednesday, May 22, 13
  34. 34. IL LONG POLLINGNon piu’ continue richieste Ajax temporizzateIl Web Server non risponde e chiude subito la connessioneLa connessione resta aperta finche’ la si puo’ usareIl Server continua a spedire lo stato del file fino al termineWednesday, May 22, 13
  35. 35. IL WEB SERVER E’APPENADIVENTATO MOLTO PIU’INTELLIGENTE! :)Wednesday, May 22, 13
  36. 36. MA...Wednesday, May 22, 13
  37. 37. IL WEB E’ANCORA LENTO!Wednesday, May 22, 13
  38. 38. IL WEB E’ANCORA LENTO!Ruby, Python, ecc sono troppo lenti by designWednesday, May 22, 13
  39. 39. IL WEB E’ANCORA LENTO!Ruby, Python, ecc sono troppo lenti by designGli interpreti sono singoli thread bloccantiWednesday, May 22, 13
  40. 40. IL WEB E’ANCORA LENTO!Ruby, Python, ecc sono troppo lenti by designGli interpreti sono singoli thread bloccantiIl C e’ veloce ma uno sconosciuto per troppi webdevWednesday, May 22, 13
  41. 41. SI SPERIMENTA CON:Wednesday, May 22, 13
  42. 42. SI SPERIMENTA CON:RubyWednesday, May 22, 13
  43. 43. SI SPERIMENTA CON:RubyPythonWednesday, May 22, 13
  44. 44. SI SPERIMENTA CON:RubyPythonAskelWednesday, May 22, 13
  45. 45. L’OBIETTIVO:Wednesday, May 22, 13
  46. 46. L’OBIETTIVO:Costruire un sistema libero da lock!Wednesday, May 22, 13
  47. 47. LA RISPOSTA:Wednesday, May 22, 13
  48. 48. LA RISPOSTA:Tutto in un solo threadWednesday, May 22, 13
  49. 49. LA RISPOSTA:Tutto in un solo threadMigliora?Wednesday, May 22, 13
  50. 50. LA RISPOSTA:Tutto in un solo threadMigliora?SI! Si possono evitare tutti i problemi derivanti dai lock!Wednesday, May 22, 13
  51. 51. LA RISPOSTA:Tutto in un solo threadMigliora?SI! Si possono evitare tutti i problemi derivanti dai lock!C’e’ un linguaggio che tutto cio’ lo fa di natura:Wednesday, May 22, 13
  52. 52. JAVASCRIPTWednesday, May 22, 13
  53. 53. JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeWednesday, May 22, 13
  54. 54. JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Wednesday, May 22, 13
  55. 55. JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciatoV8Wednesday, May 22, 13
  56. 56. JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciatoV8Ha le caratteristiche adatte:Wednesday, May 22, 13
  57. 57. JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciatoV8Ha le caratteristiche adatte:ClosuresWednesday, May 22, 13
  58. 58. JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciatoV8Ha le caratteristiche adatte:ClosuresFunzioni anonimeWednesday, May 22, 13
  59. 59. JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciatoV8Ha le caratteristiche adatte:ClosuresFunzioni anonimeNon e’ usato al di fuori dei browserWednesday, May 22, 13
  60. 60. JAVASCRIPTNegli ultimi anni ha preso sempre piu’ piedeTutti i maggiori browser stavano gia’ “combattendo su js”Nel 2008 era stato rilasciatoV8Ha le caratteristiche adatte:ClosuresFunzioni anonimeNon e’ usato al di fuori dei browserQuindi non ha preconcetti su come fare le cose.Wednesday, May 22, 13
  61. 61. NASCE NODE.JSWednesday, May 22, 13
  62. 62. NASCE NODE.JSViene presentato alla javascript conf di BerlinoWednesday, May 22, 13
  63. 63. NASCE NODE.JSViene presentato alla javascript conf di BerlinoLa prima app di demo: un IRC Server, 400 linee di codice!Wednesday, May 22, 13
  64. 64. NASCE NODE.JSViene presentato alla javascript conf di BerlinoLa prima app di demo: un IRC Server, 400 linee di codice!Ed e’ fatto per costruire network servers!Wednesday, May 22, 13
  65. 65. NASCE NODE.JSViene presentato alla javascript conf di BerlinoLa prima app di demo: un IRC Server, 400 linee di codice!Ed e’ fatto per costruire network servers!Il suo nome indica che e’ fatto per essere un nodo tra moltiWednesday, May 22, 13
  66. 66. NASCE NODE.JSViene presentato alla javascript conf di BerlinoLa prima app di demo: un IRC Server, 400 linee di codice!Ed e’ fatto per costruire network servers!Il suo nome indica che e’ fatto per essere un nodo tra moltiE’ adatto alla Cloud* per sua natura.*Una volta si chiamava internetWednesday, May 22, 13
  67. 67. FATTI: IL COSTO DELL’I/O• cache L1: 3 cicli• cache L2: 14 cicli• RAM: 250 cicli• Disco: 41x10^6 cicli• Network: 240x10^6 cicliWednesday, May 22, 13
  68. 68. ASYNC E NEXTTICKWednesday, May 22, 13
  69. 69. ASYNC E NEXTTICKle applicazioni node girano in un singolo threadWednesday, May 22, 13
  70. 70. ASYNC E NEXTTICKLe applicazioni node girano in un singolo threadQuesto comporta che ad ogni dato momento viene eseguitosolo un task nell’event loopWednesday, May 22, 13
  71. 71. ASYNC E NEXTTICKLe applicazioni node girano in un singolo threadQuesto comporta che ad ogni dato momento viene eseguitosolo un task nell’event loopPossiamo immaginare l’event loop come una coda di callbackWednesday, May 22, 13
  72. 72. ASYNC E NEXTTICKLe applicazioni node girano in un singolo threadQuesto comporta che ad ogni dato momento viene eseguitosolo un task nell’event loopPossiamo immaginare l’event loop come una coda di callbackAd ogni tick dell’event loop viene eseguida una delle callbacknella codaWednesday, May 22, 13
  73. 73. ASYNC E NEXTTICKLe applicazioni node girano in un singolo threadQuesto comporta che ad ogni dato momento viene eseguitosolo un task nell’event loopPossiamo immaginare l’event loop come una coda di callbackAd ogni tick dell’event loop viene eseguida una delle callbacknella codaNon c’e’ concorrenza ne’ multicoreWednesday, May 22, 13
  74. 74. User NODENODEClient Web EngineDatabaseLogging facilityMass storage(big slow disk)DBDiskESEMPIO DI ARCHITETTURAIn questo modo i logs non rallentano piu’ i processi criticiWednesday, May 22, 13
  75. 75. backendserverMobile clientNodeJsinstancesMobile ClientESEMPIO: LINKEDINLinkedin usa node.js come middleware layer tra il backend e leapplicazioni mobileWednesday, May 22, 13
  76. 76. UN CASO COMPLESSOIl backend di SaveThe Mom e’ tutto in node.js e ne sfruttapesantemente il modello asincrono con l’aiuto di bus e codeWednesday, May 22, 13
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×