SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Convincing the boss



       Claudio Cicali
    Better Software 2011
Obiettivi


            Claudio Cicali - Better Software 2011
Claudio Cicali
Freelance Web Developer


      claudio.cicali@gmail.com
      @caludio
      http://ccl.me

                      “Fighting Internet Explorer since 1999”




                                     Claudio Cicali - Better Software 2011
?
“EVENT DRIVEN I/O FRAMEWORK”
           (Wikipedia)




                         Claudio Cicali - Better Software 2011
!?
     Claudio Cicali - Better Software 2011
Un interprete JavaScript (Google V8)
                +
         Alcuni componenti
                +
       Codice di collegamento
                =
Un programma che esegue JavaScript
     (server side - no browser)

                             Claudio Cicali - Better Software 2011
JavaScript    Node standard library



    C             Node bindings


                    thread    event
                     pool     loop
             V8
                   (libeio)   (libev)




                                      Claudio Cicali - Better Software 2011
Scopo:
Una piattaforma per sviluppare
     applicazioni di rete
       scalabili e veloci
        in JavaScript


        Ruby Event Machine
      Python Twisted / Tornado

                             Claudio Cicali - Better Software 2011
Creato da
Ryan Dahl
 nel 2009


   Sponsorizzato da Joyvent
       (San Francisco)

                        Claudio Cicali - Better Software 2011
Esecuzione di script




                       Claudio Cicali - Better Software 2011
Interfaccia REPL




                   Claudio Cicali - Better Software 2011
Windows?

                    No.
                  (fino alla 0.5)
Microsoft aiuta ufficialmente - annuncio del 23/6




                                    Claudio Cicali - Better Software 2011
Linee guida dello sviluppo


Integrare componenti esistenti

Massima estensibilità

Guardare sempre avanti



                        Claudio Cicali - Better Software 2011
Integrazione


Motore JavaScript V8 (Google Chrome)

LIBEV (event loop)

LIBEIO (thread pool)




                           Claudio Cicali - Better Software 2011
JavaScript    Node standard library



    C             Node bindings


                    thread    event
                     pool     loop
             V8
                   (libeio)   (libev)




                                      Claudio Cicali - Better Software 2011
Estensibilità



Moduli CommonJS

Possibile utilizzo di librerie C/C++




                             Claudio Cicali - Better Software 2011
Guardare al futuro



Progetto molto “dinamico”:
nessun problema a non garantire
la retrocompatibilità




                          Claudio Cicali - Better Software 2011
Caratteristiche
        tecniche peculiari
Architettura “singolo processo” con event loop
     (no multiprocesso, no multi-thread)

   Qualsiasi operazione di I/O è asincrona
     (file system compreso, of course)

   Supporto nativo per HTTP, DNS, TLS



                                   Claudio Cicali - Better Software 2011
This is the node.js project:

To provide a purely evented,
non-blocking infrastructure to
script highly concurrent programs.




                               Claudio Cicali - Better Software 2011
Caratteristiche conseguenti

  Ottime prestazioni (veloce e scalabile)

  Basso impegno di risorse

  Soffre l’impegno della CPU
  (migliorerà con gli Web Workers)

  La programmazione a eventi
  non è per definizione lineare...


                                    Claudio Cicali - Better Software 2011
(grafico del 2010)
                           Smaller is Better
                 80




                 60
response time (ms)




                                                                  server
                 40                                                  nginx
                                                                     thin
                                                                     tornado
                                                                     node


                 20




                      50   100        150      200   250        300
                                 concurrency




                                                           Claudio Cicali - Better Software 2011
Caratteristiche indirette
  Ben documentato

  Community molto attiva
  ~5000 utenti su google groups
  ~2000+ domande su StackOverflow
  ~600 persone su #freenode

  832 moduli, so far
  Ehi, è JavaScript!


                           Claudio Cicali - Better Software 2011
Ambiente reale
Browser                     Server
                  Socket.io        Node
    Script X
                                  Script Y



               Ambiente di test
Test suite                    Server
     Node         Socket.io        Node
    Script X                      Script Y


                                       Claudio Cicali - Better Software 2011
Che tipi di applicazione?

Servizi di rete
(HTTP, proxy, gateway, messaging)

 Backend per API JSON

   Real time (“soft”). Con Socket.io

    Streaming (up & down)

      Siti “one page”

        Command line tools

         Bot
                             Claudio Cicali - Better Software 2011
Non è (ancora?) adatto per...


 Applicazioni che fanno uso intensivo di CPU

 Medie applicazioni web




                               Claudio Cicali - Better Software 2011
Moduli disponibili
Database: MySQL, Sqlite, PostgreSQL, Oracle

NoSQL: CouchDB, Mongo, Redis

Servizi: Static file server, caching

Rete: SSH, xmpp, ftp, nntp, imap...

Middleware: Cookie, Session, Connect

Templating: HAML, EJS, jsdom

JS puro: Markdown, Less.js (e YUI, jQuery)...

http://bit.ly/btcc-modules
http://bit.ly/btcc-npm
                                       Claudio Cicali - Better Software 2011
Moduli? Anche troppi!




                  Claudio Cicali - Better Software 2011
Ad alto livello

Express (web framework)

    Calipso (CMS)




                      Claudio Cicali - Better Software 2011
Strumenti per lo sviluppo

 npm: package manager

 node inspector: debugger

 supervisor / forever: script manager




                             Claudio Cicali - Better Software 2011
Claudio Cicali - Better Software 2011
Debugger




           Claudio Cicali - Better Software 2011
“The guys that are getting paid the big bucks to
deliver scalable solutions aren’t up at night
feverishly rewriting their systems in Node.
They’re doing what they’ve always done:
measuring, testing, benchmarking, thinking hard,
keeping up with the academic literature that
pertains to their problems.”

                                    -- Alex Payne


     http://al3x.net/2010/07/27/node.html


                                     Claudio Cicali - Better Software 2011
Domande?

claudio.cicali@gmail.com

  Follow me: @caludio



                        Claudio Cicali - Better Software 2011

Contenu connexe

En vedette

En vedette (6)

Youryoutube
YouryoutubeYouryoutube
Youryoutube
 
Drupal + Apache SOLR
Drupal + Apache SOLRDrupal + Apache SOLR
Drupal + Apache SOLR
 
Indirizzo ip (edoardo saracino)
Indirizzo ip (edoardo saracino)Indirizzo ip (edoardo saracino)
Indirizzo ip (edoardo saracino)
 
An introduction to the web
An introduction to the webAn introduction to the web
An introduction to the web
 
JavaScript pitfalls
JavaScript pitfallsJavaScript pitfalls
JavaScript pitfalls
 
Introduzione a OpenID
Introduzione a OpenIDIntroduzione a OpenID
Introduzione a OpenID
 

Similaire à Node.js – Convincing the boss

Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailDotNetMarche
 
Spring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis WebSpring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis WebMassimiliano Dessì
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore RomeoApplicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeomarcocasario
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2Bkino2k
 
Sharepoint 2010 JQuery
Sharepoint 2010  JQuerySharepoint 2010  JQuery
Sharepoint 2010 JQueryDecatec
 
Ionic Cordova vs React Native
Ionic Cordova vs React NativeIonic Cordova vs React Native
Ionic Cordova vs React NativeAntonio Gallo
 
Webinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. SzambelanWebinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. SzambelanMiriade Spa
 
Node js dev day napoli 2016
Node js dev day napoli 2016Node js dev day napoli 2016
Node js dev day napoli 2016Michele Nasti
 
Docker Fudamentals
Docker FudamentalsDocker Fudamentals
Docker Fudamentalsmvetro
 
High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloudGabriele Baldoni
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsAlberto Brandolini
 
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web Appdotnetcode
 
Webkit meets native development
Webkit meets native developmentWebkit meets native development
Webkit meets native developmentNicholas Valbusa
 
MS Days 08 Applicazioni RIA con Silverlight 2 e WCF
MS Days 08 Applicazioni RIA con Silverlight 2 e WCFMS Days 08 Applicazioni RIA con Silverlight 2 e WCF
MS Days 08 Applicazioni RIA con Silverlight 2 e WCFFabrizio Bernabei
 
Meetup Progressive Web App
Meetup Progressive Web AppMeetup Progressive Web App
Meetup Progressive Web Appdotnetcode
 
Osd 2016 Middleware Track
Osd 2016 Middleware TrackOsd 2016 Middleware Track
Osd 2016 Middleware TrackUgo Landini
 
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAX
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAXProgettazione e sviluppo di applicazioni web di nuova generazione con AJAX
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAXLorenzo Cavina
 

Similaire à Node.js – Convincing the boss (20)

Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle Monorail
 
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
 
Spring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis WebSpring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis Web
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore RomeoApplicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeo
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
 
Sharepoint 2010 JQuery
Sharepoint 2010  JQuerySharepoint 2010  JQuery
Sharepoint 2010 JQuery
 
Ionic Cordova vs React Native
Ionic Cordova vs React NativeIonic Cordova vs React Native
Ionic Cordova vs React Native
 
Webinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. SzambelanWebinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
Webinar: "Conosci la Performance Intelligence?" a cura d A. Szambelan
 
Node js dev day napoli 2016
Node js dev day napoli 2016Node js dev day napoli 2016
Node js dev day napoli 2016
 
Docker Fudamentals
Docker FudamentalsDocker Fudamentals
Docker Fudamentals
 
High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloud
 
Html5
Html5Html5
Html5
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con Grails
 
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web App
 
Webkit meets native development
Webkit meets native developmentWebkit meets native development
Webkit meets native development
 
MS Days 08 Applicazioni RIA con Silverlight 2 e WCF
MS Days 08 Applicazioni RIA con Silverlight 2 e WCFMS Days 08 Applicazioni RIA con Silverlight 2 e WCF
MS Days 08 Applicazioni RIA con Silverlight 2 e WCF
 
Meetup Progressive Web App
Meetup Progressive Web AppMeetup Progressive Web App
Meetup Progressive Web App
 
Osd 2016 Middleware Track
Osd 2016 Middleware TrackOsd 2016 Middleware Track
Osd 2016 Middleware Track
 
Angular and beyond
Angular and beyondAngular and beyond
Angular and beyond
 
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAX
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAXProgettazione e sviluppo di applicazioni web di nuova generazione con AJAX
Progettazione e sviluppo di applicazioni web di nuova generazione con AJAX
 

Node.js – Convincing the boss

  • 1. Convincing the boss Claudio Cicali Better Software 2011
  • 2. Obiettivi Claudio Cicali - Better Software 2011
  • 3. Claudio Cicali Freelance Web Developer claudio.cicali@gmail.com @caludio http://ccl.me “Fighting Internet Explorer since 1999” Claudio Cicali - Better Software 2011
  • 4. ? “EVENT DRIVEN I/O FRAMEWORK” (Wikipedia) Claudio Cicali - Better Software 2011
  • 5. !? Claudio Cicali - Better Software 2011
  • 6. Un interprete JavaScript (Google V8) + Alcuni componenti + Codice di collegamento = Un programma che esegue JavaScript (server side - no browser) Claudio Cicali - Better Software 2011
  • 7. JavaScript Node standard library C Node bindings thread event pool loop V8 (libeio) (libev) Claudio Cicali - Better Software 2011
  • 8. Scopo: Una piattaforma per sviluppare applicazioni di rete scalabili e veloci in JavaScript Ruby Event Machine Python Twisted / Tornado Claudio Cicali - Better Software 2011
  • 9. Creato da Ryan Dahl nel 2009 Sponsorizzato da Joyvent (San Francisco) Claudio Cicali - Better Software 2011
  • 10. Esecuzione di script Claudio Cicali - Better Software 2011
  • 11. Interfaccia REPL Claudio Cicali - Better Software 2011
  • 12. Windows? No. (fino alla 0.5) Microsoft aiuta ufficialmente - annuncio del 23/6 Claudio Cicali - Better Software 2011
  • 13. Linee guida dello sviluppo Integrare componenti esistenti Massima estensibilità Guardare sempre avanti Claudio Cicali - Better Software 2011
  • 14. Integrazione Motore JavaScript V8 (Google Chrome) LIBEV (event loop) LIBEIO (thread pool) Claudio Cicali - Better Software 2011
  • 15. JavaScript Node standard library C Node bindings thread event pool loop V8 (libeio) (libev) Claudio Cicali - Better Software 2011
  • 16. Estensibilità Moduli CommonJS Possibile utilizzo di librerie C/C++ Claudio Cicali - Better Software 2011
  • 17. Guardare al futuro Progetto molto “dinamico”: nessun problema a non garantire la retrocompatibilità Claudio Cicali - Better Software 2011
  • 18. Caratteristiche tecniche peculiari Architettura “singolo processo” con event loop (no multiprocesso, no multi-thread) Qualsiasi operazione di I/O è asincrona (file system compreso, of course) Supporto nativo per HTTP, DNS, TLS Claudio Cicali - Better Software 2011
  • 19. This is the node.js project: To provide a purely evented, non-blocking infrastructure to script highly concurrent programs. Claudio Cicali - Better Software 2011
  • 20. Caratteristiche conseguenti Ottime prestazioni (veloce e scalabile) Basso impegno di risorse Soffre l’impegno della CPU (migliorerà con gli Web Workers) La programmazione a eventi non è per definizione lineare... Claudio Cicali - Better Software 2011
  • 21. (grafico del 2010) Smaller is Better 80 60 response time (ms) server 40 nginx thin tornado node 20 50 100 150 200 250 300 concurrency Claudio Cicali - Better Software 2011
  • 22. Caratteristiche indirette Ben documentato Community molto attiva ~5000 utenti su google groups ~2000+ domande su StackOverflow ~600 persone su #freenode 832 moduli, so far Ehi, è JavaScript! Claudio Cicali - Better Software 2011
  • 23. Ambiente reale Browser Server Socket.io Node Script X Script Y Ambiente di test Test suite Server Node Socket.io Node Script X Script Y Claudio Cicali - Better Software 2011
  • 24. Che tipi di applicazione? Servizi di rete (HTTP, proxy, gateway, messaging) Backend per API JSON Real time (“soft”). Con Socket.io Streaming (up & down) Siti “one page” Command line tools Bot Claudio Cicali - Better Software 2011
  • 25. Non è (ancora?) adatto per... Applicazioni che fanno uso intensivo di CPU Medie applicazioni web Claudio Cicali - Better Software 2011
  • 26. Moduli disponibili Database: MySQL, Sqlite, PostgreSQL, Oracle NoSQL: CouchDB, Mongo, Redis Servizi: Static file server, caching Rete: SSH, xmpp, ftp, nntp, imap... Middleware: Cookie, Session, Connect Templating: HAML, EJS, jsdom JS puro: Markdown, Less.js (e YUI, jQuery)... http://bit.ly/btcc-modules http://bit.ly/btcc-npm Claudio Cicali - Better Software 2011
  • 27. Moduli? Anche troppi! Claudio Cicali - Better Software 2011
  • 28. Ad alto livello Express (web framework) Calipso (CMS) Claudio Cicali - Better Software 2011
  • 29. Strumenti per lo sviluppo npm: package manager node inspector: debugger supervisor / forever: script manager Claudio Cicali - Better Software 2011
  • 30. Claudio Cicali - Better Software 2011
  • 31. Debugger Claudio Cicali - Better Software 2011
  • 32. “The guys that are getting paid the big bucks to deliver scalable solutions aren’t up at night feverishly rewriting their systems in Node. They’re doing what they’ve always done: measuring, testing, benchmarking, thinking hard, keeping up with the academic literature that pertains to their problems.” -- Alex Payne http://al3x.net/2010/07/27/node.html Claudio Cicali - Better Software 2011
  • 33. Domande? claudio.cicali@gmail.com Follow me: @caludio Claudio Cicali - Better Software 2011

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n