SlideShare ist ein Scribd-Unternehmen logo
1 von 76
Downloaden Sie, um offline zu lesen
NODE.JS
Una breve introduzione
Wednesday, May 22, 13
@unlucio
CIAO! :)
Wednesday, May 22, 13
INDICE DEL CORSO
CORE
• Introduzione su node
• Installazione
• Struttura base di un progetto
• npm
• Hands on: Esempi di funzionalita’ di base
• Hands on: Esempi di piccole applicazioni
Wednesday, May 22, 13
INDICE DEL CORSO
EXPRESS
• Installazione
• Generazione di un progetto
• Routes
• Views
• Middle wares
• Sessions and Error Handling
Wednesday, May 22, 13
Benvenuti
Wednesday, May 22, 13
INDEX
• Cos’e’ Node.js
• Come e perche’ nasce
• Async e NextTick
• Esempi di architettura in cui usarlo
Wednesday, May 22, 13
Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network
applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and
efficient, perfect for data-intensive real-time applications that run across distributed devices.
CurrentVersion: v0.8.21
Wednesday, May 22, 13
RYAN DAHL
node.js creator
anno: 2009
Wednesday, May 22, 13
RYAN DAHL
Studente in Matematica
Si trasferisce in Sud America
Incontra un programmatore php
Inizia a sviluppare siti ed “applicazioni” web
Incontra ROR
Si accorge che il Web e’ lento!
Wednesday, May 22, 13
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 ROR
Wednesday, May 22, 13
Il Web e’ lento!
Per via di Java ;)
Alcuni cominciano a lavorare per velocizzare ROR
Ma il problema risiede nell’intero stack
Wednesday, May 22, 13
Il Web e’ lento!
Per via di Java ;)
Alcuni cominciano a lavorare per velocizzare ROR
Ma il problema risiede nell’intero stack
Il lavoro di Zed Shaw da vita a Mongel
Wednesday, May 22, 13
Mongrel
Per via di Java ;)
Wednesday, May 22, 13
Mongrel
Per via di Java ;)
E’ sia una libreria http, sia un webserver!
Wednesday, May 22, 13
Mongrel
Per via di Java ;)
E’ sia una libreria http, sia un webserver!
Il web server non e’ piu’ solo “una directory “
Wednesday, May 22, 13
Mongrel
Per via di Java ;)
E’ sia una libreria http, sia un webserver!
Il web server non e’ piu’ solo “una directory “
Puo’ racchiudere direttamente la logica
Wednesday, May 22, 13
Il Web Server
Per via di Java ;)
Wednesday, May 22, 13
Il Web Server
Per via di Java ;)
Distillato, e’ fatto per gestire richieste e risposte
Wednesday, May 22, 13
Il Web Server
Per via di Java ;)
Distillato, e’ fatto per gestire richieste e risposte
Servire files e’ una parte ma non e’ obbligatoria
Wednesday, May 22, 13
THE FILE UPLOAD PROBLEM
Wednesday, May 22, 13
THE FILE UPLOAD PROBLEM
Caricare files via http non era poi cosi’ comune
Wednesday, May 22, 13
THE FILE UPLOAD PROBLEM
Caricare files via http non era poi cosi’ comune
Con la nascita di Ajax si cominciavano a caricareVIDEO!
Wednesday, May 22, 13
THE FILE UPLOAD PROBLEM
Caricare files via http non era poi cosi’ comune
Con la nascita di Ajax si cominciavano a caricareVIDEO!
Ed ecco un nuovo problema da affrontare:
Wednesday, May 22, 13
LA PROGRESS BAR
Wednesday, May 22, 13
LA PROGRESS BAR
Il DOM non dava alcuna informazione sul file
Wednesday, May 22, 13
LA PROGRESS BAR
Il DOM non dava alcuna informazione sul file
Il trucco era controllare lo stato del file lato server in batch.
Wednesday, May 22, 13
LA PROGRESS BAR
Il DOM non dava alcuna informazione sul file
Il 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
LA PROGRESS BAR
Il DOM non dava alcuna informazione sul file
Il 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 Mongrel
Wednesday, May 22, 13
IL LONG POLLING
Wednesday, May 22, 13
IL LONG POLLING
Non piu’ continue richieste Ajax temporizzate
Wednesday, May 22, 13
IL LONG POLLING
Non piu’ continue richieste Ajax temporizzate
Il Web Server non risponde e chiude subito la connessione
Wednesday, May 22, 13
IL LONG POLLING
Non piu’ continue richieste Ajax temporizzate
Il Web Server non risponde e chiude subito la connessione
La connessione resta aperta finche’ la si puo’ usare
Wednesday, May 22, 13
IL LONG POLLING
Non piu’ continue richieste Ajax temporizzate
Il Web Server non risponde e chiude subito la connessione
La connessione resta aperta finche’ la si puo’ usare
Il Server continua a spedire lo stato del file fino al termine
Wednesday, May 22, 13
IL WEB SERVER E’APPENA
DIVENTATO 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 design
Wednesday, May 22, 13
IL WEB E’ANCORA LENTO!
Ruby, Python, ecc sono troppo lenti by design
Gli interpreti sono singoli thread bloccanti
Wednesday, May 22, 13
IL WEB E’ANCORA LENTO!
Ruby, Python, ecc sono troppo lenti by design
Gli interpreti sono singoli thread bloccanti
Il C e’ veloce ma uno sconosciuto per troppi webdev
Wednesday, May 22, 13
SI SPERIMENTA CON:
Wednesday, May 22, 13
SI SPERIMENTA CON:
Ruby
Wednesday, May 22, 13
SI SPERIMENTA CON:
Ruby
Python
Wednesday, May 22, 13
SI SPERIMENTA CON:
Ruby
Python
Askel
Wednesday, 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 thread
Wednesday, May 22, 13
LA RISPOSTA:
Tutto in un solo thread
Migliora?
Wednesday, May 22, 13
LA RISPOSTA:
Tutto in un solo thread
Migliora?
SI! Si possono evitare tutti i problemi derivanti dai lock!
Wednesday, May 22, 13
LA RISPOSTA:
Tutto in un solo thread
Migliora?
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
JAVASCRIPT
Wednesday, May 22, 13
JAVASCRIPT
Negli ultimi anni ha preso sempre piu’ piede
Wednesday, May 22, 13
JAVASCRIPT
Negli ultimi anni ha preso sempre piu’ piede
Tutti i maggiori browser stavano gia’ “combattendo su js”
Wednesday, May 22, 13
JAVASCRIPT
Negli ultimi anni ha preso sempre piu’ piede
Tutti i maggiori browser stavano gia’ “combattendo su js”
Nel 2008 era stato rilasciatoV8
Wednesday, May 22, 13
JAVASCRIPT
Negli ultimi anni ha preso sempre piu’ piede
Tutti i maggiori browser stavano gia’ “combattendo su js”
Nel 2008 era stato rilasciatoV8
Ha le caratteristiche adatte:
Wednesday, May 22, 13
JAVASCRIPT
Negli ultimi anni ha preso sempre piu’ piede
Tutti i maggiori browser stavano gia’ “combattendo su js”
Nel 2008 era stato rilasciatoV8
Ha le caratteristiche adatte:
Closures
Wednesday, May 22, 13
JAVASCRIPT
Negli ultimi anni ha preso sempre piu’ piede
Tutti i maggiori browser stavano gia’ “combattendo su js”
Nel 2008 era stato rilasciatoV8
Ha le caratteristiche adatte:
Closures
Funzioni anonime
Wednesday, May 22, 13
JAVASCRIPT
Negli ultimi anni ha preso sempre piu’ piede
Tutti i maggiori browser stavano gia’ “combattendo su js”
Nel 2008 era stato rilasciatoV8
Ha le caratteristiche adatte:
Closures
Funzioni anonime
Non e’ usato al di fuori dei browser
Wednesday, May 22, 13
JAVASCRIPT
Negli ultimi anni ha preso sempre piu’ piede
Tutti i maggiori browser stavano gia’ “combattendo su js”
Nel 2008 era stato rilasciatoV8
Ha le caratteristiche adatte:
Closures
Funzioni anonime
Non e’ usato al di fuori dei browser
Quindi non ha preconcetti su come fare le cose.
Wednesday, May 22, 13
NASCE NODE.JS
Wednesday, May 22, 13
NASCE NODE.JS
Viene presentato alla javascript conf di Berlino
Wednesday, May 22, 13
NASCE NODE.JS
Viene presentato alla javascript conf di Berlino
La prima app di demo: un IRC Server, 400 linee di codice!
Wednesday, May 22, 13
NASCE NODE.JS
Viene presentato alla javascript conf di Berlino
La prima app di demo: un IRC Server, 400 linee di codice!
Ed e’ fatto per costruire network servers!
Wednesday, May 22, 13
NASCE NODE.JS
Viene presentato alla javascript conf di Berlino
La 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 molti
Wednesday, May 22, 13
NASCE NODE.JS
Viene presentato alla javascript conf di Berlino
La 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 molti
E’ adatto alla Cloud* per sua natura.
*Una volta si chiamava internet
Wednesday, May 22, 13
FATTI: IL COSTO DELL’I/O
• cache L1: 3 cicli
• cache L2: 14 cicli
• RAM: 250 cicli
• Disco: 41x10^6 cicli
• Network: 240x10^6 cicli
Wednesday, May 22, 13
ASYNC E NEXTTICK
Wednesday, May 22, 13
ASYNC E NEXTTICK
le applicazioni node girano in un singolo thread
Wednesday, May 22, 13
ASYNC E NEXTTICK
Le applicazioni node girano in un singolo thread
Questo comporta che ad ogni dato momento viene eseguito
solo un task nell’event loop
Wednesday, May 22, 13
ASYNC E NEXTTICK
Le applicazioni node girano in un singolo thread
Questo comporta che ad ogni dato momento viene eseguito
solo un task nell’event loop
Possiamo immaginare l’event loop come una coda di callback
Wednesday, May 22, 13
ASYNC E NEXTTICK
Le applicazioni node girano in un singolo thread
Questo comporta che ad ogni dato momento viene eseguito
solo un task nell’event loop
Possiamo immaginare l’event loop come una coda di callback
Ad ogni tick dell’event loop viene eseguida una delle callback
nella coda
Wednesday, May 22, 13
ASYNC E NEXTTICK
Le applicazioni node girano in un singolo thread
Questo comporta che ad ogni dato momento viene eseguito
solo un task nell’event loop
Possiamo immaginare l’event loop come una coda di callback
Ad ogni tick dell’event loop viene eseguida una delle callback
nella coda
Non c’e’ concorrenza ne’ multicore
Wednesday, May 22, 13
User NODE
NODE
Client Web Engine
Database
Logging facility
Mass storage
(big slow disk)
DB
Disk
ESEMPIO DI ARCHITETTURA
In questo modo i logs non rallentano piu’ i processi critici
Wednesday, May 22, 13
backend
server
Mobile client
NodeJs
instances
Mobile Client
ESEMPIO: LINKEDIN
Linkedin usa node.js come middleware layer tra il backend e le
applicazioni mobile
Wednesday, May 22, 13
UN CASO COMPLESSO
Il backend di SaveThe Mom e’ tutto in node.js e ne sfrutta
pesantemente il modello asincrono con l’aiuto di bus e code
Wednesday, May 22, 13

Weitere ähnliche Inhalte

Was ist angesagt?

Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page ApplicationsRoberto Messora
 
Working between the clouds
Working between the cloudsWorking between the clouds
Working between the cloudsDavide Cerbo
 
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...Marco Parenzan
 
SLA Confidential
SLA ConfidentialSLA Confidential
SLA ConfidentialVMUG IT
 
Blazor - i limiti sono fatti per essere superati
Blazor - i limiti sono fatti per essere superatiBlazor - i limiti sono fatti per essere superati
Blazor - i limiti sono fatti per essere superatiCommit University
 
ASP .NET Core hands-on
ASP .NET Core hands-onASP .NET Core hands-on
ASP .NET Core hands-onugidotnet
 
WordPress lento? Guida per un sito web veloce e performante. Autore Emilio Pe...
WordPress lento? Guida per un sito web veloce e performante. Autore Emilio Pe...WordPress lento? Guida per un sito web veloce e performante. Autore Emilio Pe...
WordPress lento? Guida per un sito web veloce e performante. Autore Emilio Pe...Petrozzi Emilio
 
Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniCreare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniAndrea Dottor
 

Was ist angesagt? (10)

Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page Applications
 
Working between the clouds
Working between the cloudsWorking between the clouds
Working between the clouds
 
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
SLA Confidential
SLA ConfidentialSLA Confidential
SLA Confidential
 
Making Chatbots
Making ChatbotsMaking Chatbots
Making Chatbots
 
Blazor - i limiti sono fatti per essere superati
Blazor - i limiti sono fatti per essere superatiBlazor - i limiti sono fatti per essere superati
Blazor - i limiti sono fatti per essere superati
 
ASP .NET Core hands-on
ASP .NET Core hands-onASP .NET Core hands-on
ASP .NET Core hands-on
 
WordPress lento? Guida per un sito web veloce e performante. Autore Emilio Pe...
WordPress lento? Guida per un sito web veloce e performante. Autore Emilio Pe...WordPress lento? Guida per un sito web veloce e performante. Autore Emilio Pe...
WordPress lento? Guida per un sito web veloce e performante. Autore Emilio Pe...
 
Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniCreare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 

Andere mochten auch

Apache Cordova: Overview and Introduction
Apache Cordova: Overview and IntroductionApache Cordova: Overview and Introduction
Apache Cordova: Overview and IntroductionGabriele Falasca
 
V. liqviat 2009
V. liqviat 2009V. liqviat 2009
V. liqviat 2009nera24mx
 
Node.js: perche' tutto questo hype?
Node.js: perche' tutto questo hype?Node.js: perche' tutto questo hype?
Node.js: perche' tutto questo hype?Giancarlo Valente
 
Corso base di Tecnologie WEB - Primi passi in javascript
Corso base di Tecnologie WEB - Primi passi in javascriptCorso base di Tecnologie WEB - Primi passi in javascript
Corso base di Tecnologie WEB - Primi passi in javascriptStudiabo
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Web base-03-js-numeri stringearray
Web base-03-js-numeri stringearrayWeb base-03-js-numeri stringearray
Web base-03-js-numeri stringearrayStudiabo
 
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoWorkshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoGabriele Gaggi
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Eugenio Minardi
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScriptGiovanni Buffa
 
Da JavaScript a TypeScript
Da JavaScript a TypeScriptDa JavaScript a TypeScript
Da JavaScript a TypeScriptRoberto Messora
 
Roma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsRoma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsClaudio Mignanti
 
Design for Developers: Introduction to Bootstrap 3
Design for Developers: Introduction to Bootstrap 3Design for Developers: Introduction to Bootstrap 3
Design for Developers: Introduction to Bootstrap 3John Bertucci
 
Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907NodejsFoundation
 
Introduction to Bootstrap
Introduction to BootstrapIntroduction to Bootstrap
Introduction to BootstrapRon Reiter
 

Andere mochten auch (17)

node.js everywhere
node.js everywherenode.js everywhere
node.js everywhere
 
Apache Cordova: Overview and Introduction
Apache Cordova: Overview and IntroductionApache Cordova: Overview and Introduction
Apache Cordova: Overview and Introduction
 
Aulas linux
Aulas linuxAulas linux
Aulas linux
 
V. liqviat 2009
V. liqviat 2009V. liqviat 2009
V. liqviat 2009
 
Node.js: perche' tutto questo hype?
Node.js: perche' tutto questo hype?Node.js: perche' tutto questo hype?
Node.js: perche' tutto questo hype?
 
Corso base di Tecnologie WEB - Primi passi in javascript
Corso base di Tecnologie WEB - Primi passi in javascriptCorso base di Tecnologie WEB - Primi passi in javascript
Corso base di Tecnologie WEB - Primi passi in javascript
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Web base-03-js-numeri stringearray
Web base-03-js-numeri stringearrayWeb base-03-js-numeri stringearray
Web base-03-js-numeri stringearray
 
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoWorkshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScript
 
Da JavaScript a TypeScript
Da JavaScript a TypeScriptDa JavaScript a TypeScript
Da JavaScript a TypeScript
 
Roma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsRoma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejs
 
Design for Developers: Introduction to Bootstrap 3
Design for Developers: Introduction to Bootstrap 3Design for Developers: Introduction to Bootstrap 3
Design for Developers: Introduction to Bootstrap 3
 
Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907
 
Introduction to Bootstrap
Introduction to BootstrapIntroduction to Bootstrap
Introduction to Bootstrap
 

Ähnlich wie Introduzione a node: cenni storici ecc

Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e javaMatteo Baccan
 
Groovy technology ecosystem
Groovy technology ecosystemGroovy technology ecosystem
Groovy technology ecosystemFrancesco Lerro
 
Working between the clouds (versione completa)
Working between the clouds (versione completa)Working between the clouds (versione completa)
Working between the clouds (versione completa)Davide Cerbo
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailDotNetMarche
 
Accessibilità (e Plone) - le norme ma con buon senso - 2015
Accessibilità (e Plone) - le norme ma con buon senso - 2015Accessibilità (e Plone) - le norme ma con buon senso - 2015
Accessibilità (e Plone) - le norme ma con buon senso - 2015Jacopo Deyla
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore RomeoApplicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeomarcocasario
 
CCI2019 - SQL Server ed Azure: Disaster Recovery per tutti
CCI2019 - SQL Server ed Azure: Disaster Recovery per tuttiCCI2019 - SQL Server ed Azure: Disaster Recovery per tutti
CCI2019 - SQL Server ed Azure: Disaster Recovery per tuttiwalk2talk srl
 
Confronto fra web services framework (open source)
Confronto fra web services framework (open source)Confronto fra web services framework (open source)
Confronto fra web services framework (open source)Alberto Lagna
 
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On RailsLuca Mearelli
 
Roboearth su ROS: il nodo Dream
Roboearth su ROS: il nodo DreamRoboearth su ROS: il nodo Dream
Roboearth su ROS: il nodo DreamFlavio Marcato
 
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on Azure
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on AzureSQL Saturday 871 - Sardegna 2019 - SQL Server DR on Azure
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on AzureMarco Obinu
 
Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017MongoDB
 
Realizzazione di Microservizi con Docker, Kubernetes, Kafka e Mongodb
Realizzazione di Microservizi con Docker, Kubernetes, Kafka e MongodbRealizzazione di Microservizi con Docker, Kubernetes, Kafka e Mongodb
Realizzazione di Microservizi con Docker, Kubernetes, Kafka e MongodbMongoDB
 
Node.js – Convincing the boss
Node.js – Convincing the bossNode.js – Convincing the boss
Node.js – Convincing the bossClaudio Cicali
 
Introduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciutoIntroduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciutoDaniele Megna
 
Jc06 Antonio Terreno Fluidtime
Jc06 Antonio Terreno FluidtimeJc06 Antonio Terreno Fluidtime
Jc06 Antonio Terreno FluidtimeAntonio Terreno
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101DotNetCampus
 

Ähnlich wie Introduzione a node: cenni storici ecc (20)

Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e java
 
Java basics
Java basicsJava basics
Java basics
 
Groovy technology ecosystem
Groovy technology ecosystemGroovy technology ecosystem
Groovy technology ecosystem
 
Working between the clouds (versione completa)
Working between the clouds (versione completa)Working between the clouds (versione completa)
Working between the clouds (versione completa)
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle Monorail
 
Accessibilità (e Plone) - le norme ma con buon senso - 2015
Accessibilità (e Plone) - le norme ma con buon senso - 2015Accessibilità (e Plone) - le norme ma con buon senso - 2015
Accessibilità (e Plone) - le norme ma con buon senso - 2015
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore RomeoApplicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeo
 
Tile server
Tile serverTile server
Tile server
 
CCI2019 - SQL Server ed Azure: Disaster Recovery per tutti
CCI2019 - SQL Server ed Azure: Disaster Recovery per tuttiCCI2019 - SQL Server ed Azure: Disaster Recovery per tutti
CCI2019 - SQL Server ed Azure: Disaster Recovery per tutti
 
Confronto fra web services framework (open source)
Confronto fra web services framework (open source)Confronto fra web services framework (open source)
Confronto fra web services framework (open source)
 
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On Rails
 
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
 
Roboearth su ROS: il nodo Dream
Roboearth su ROS: il nodo DreamRoboearth su ROS: il nodo Dream
Roboearth su ROS: il nodo Dream
 
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on Azure
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on AzureSQL Saturday 871 - Sardegna 2019 - SQL Server DR on Azure
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on Azure
 
Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017
 
Realizzazione di Microservizi con Docker, Kubernetes, Kafka e Mongodb
Realizzazione di Microservizi con Docker, Kubernetes, Kafka e MongodbRealizzazione di Microservizi con Docker, Kubernetes, Kafka e Mongodb
Realizzazione di Microservizi con Docker, Kubernetes, Kafka e Mongodb
 
Node.js – Convincing the boss
Node.js – Convincing the bossNode.js – Convincing the boss
Node.js – Convincing the boss
 
Introduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciutoIntroduzione pratica a docker, da chi lo ha appena conosciuto
Introduzione pratica a docker, da chi lo ha appena conosciuto
 
Jc06 Antonio Terreno Fluidtime
Jc06 Antonio Terreno FluidtimeJc06 Antonio Terreno Fluidtime
Jc06 Antonio Terreno Fluidtime
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101
 

Kürzlich hochgeladen

Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 

Kürzlich hochgeladen (9)

Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 

Introduzione a node: cenni storici ecc

  • 3. INDICE DEL CORSO CORE • Introduzione su node • Installazione • Struttura base di un progetto • npm • Hands on: Esempi di funzionalita’ di base • Hands on: Esempi di piccole applicazioni Wednesday, May 22, 13
  • 4. INDICE DEL CORSO EXPRESS • Installazione • Generazione di un progetto • Routes • Views • Middle wares • Sessions and Error Handling Wednesday, May 22, 13
  • 6. INDEX • Cos’e’ Node.js • Come e perche’ nasce • Async e NextTick • Esempi di architettura in cui usarlo Wednesday, May 22, 13
  • 7. Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. CurrentVersion: v0.8.21 Wednesday, May 22, 13
  • 8. RYAN DAHL node.js creator anno: 2009 Wednesday, May 22, 13
  • 9. RYAN DAHL Studente in Matematica Si trasferisce in Sud America Incontra un programmatore php Inizia a sviluppare siti ed “applicazioni” web Incontra ROR Si accorge che il Web e’ lento! Wednesday, May 22, 13
  • 10. Il Web e’ lento! Per via di Java ;) Wednesday, May 22, 13
  • 11. Il Web e’ lento! Per via di Java ;) Alcuni cominciano a lavorare per velocizzare ROR Wednesday, May 22, 13
  • 12. Il Web e’ lento! Per via di Java ;) Alcuni cominciano a lavorare per velocizzare ROR Ma il problema risiede nell’intero stack Wednesday, May 22, 13
  • 13. Il Web e’ lento! Per via di Java ;) Alcuni cominciano a lavorare per velocizzare ROR Ma il problema risiede nell’intero stack Il lavoro di Zed Shaw da vita a Mongel Wednesday, May 22, 13
  • 14. Mongrel Per via di Java ;) Wednesday, May 22, 13
  • 15. Mongrel Per via di Java ;) E’ sia una libreria http, sia un webserver! Wednesday, May 22, 13
  • 16. Mongrel Per 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. Mongrel Per via di Java ;) E’ sia una libreria http, sia un webserver! Il web server non e’ piu’ solo “una directory “ Puo’ racchiudere direttamente la logica Wednesday, May 22, 13
  • 18. Il Web Server Per via di Java ;) Wednesday, May 22, 13
  • 19. Il Web Server Per via di Java ;) Distillato, e’ fatto per gestire richieste e risposte Wednesday, May 22, 13
  • 20. Il Web Server Per via di Java ;) Distillato, e’ fatto per gestire richieste e risposte Servire files e’ una parte ma non e’ obbligatoria Wednesday, May 22, 13
  • 21. THE FILE UPLOAD PROBLEM Wednesday, May 22, 13
  • 22. THE FILE UPLOAD PROBLEM Caricare files via http non era poi cosi’ comune Wednesday, May 22, 13
  • 23. THE FILE UPLOAD PROBLEM Caricare files via http non era poi cosi’ comune Con la nascita di Ajax si cominciavano a caricareVIDEO! Wednesday, May 22, 13
  • 24. THE FILE UPLOAD PROBLEM Caricare files via http non era poi cosi’ comune Con la nascita di Ajax si cominciavano a caricareVIDEO! Ed ecco un nuovo problema da affrontare: Wednesday, May 22, 13
  • 26. LA PROGRESS BAR Il DOM non dava alcuna informazione sul file Wednesday, May 22, 13
  • 27. LA PROGRESS BAR Il DOM non dava alcuna informazione sul file Il trucco era controllare lo stato del file lato server in batch. Wednesday, May 22, 13
  • 28. LA PROGRESS BAR Il DOM non dava alcuna informazione sul file Il 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. LA PROGRESS BAR Il DOM non dava alcuna informazione sul file Il 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 Mongrel Wednesday, May 22, 13
  • 31. IL LONG POLLING Non piu’ continue richieste Ajax temporizzate Wednesday, May 22, 13
  • 32. IL LONG POLLING Non piu’ continue richieste Ajax temporizzate Il Web Server non risponde e chiude subito la connessione Wednesday, May 22, 13
  • 33. IL LONG POLLING Non piu’ continue richieste Ajax temporizzate Il Web Server non risponde e chiude subito la connessione La connessione resta aperta finche’ la si puo’ usare Wednesday, May 22, 13
  • 34. IL LONG POLLING Non piu’ continue richieste Ajax temporizzate Il Web Server non risponde e chiude subito la connessione La connessione resta aperta finche’ la si puo’ usare Il Server continua a spedire lo stato del file fino al termine Wednesday, May 22, 13
  • 35. IL WEB SERVER E’APPENA DIVENTATO MOLTO PIU’ INTELLIGENTE! :) Wednesday, May 22, 13
  • 37. IL WEB E’ANCORA LENTO! Wednesday, May 22, 13
  • 38. IL WEB E’ANCORA LENTO! Ruby, Python, ecc sono troppo lenti by design Wednesday, May 22, 13
  • 39. IL WEB E’ANCORA LENTO! Ruby, Python, ecc sono troppo lenti by design Gli interpreti sono singoli thread bloccanti Wednesday, May 22, 13
  • 40. IL WEB E’ANCORA LENTO! Ruby, Python, ecc sono troppo lenti by design Gli interpreti sono singoli thread bloccanti Il C e’ veloce ma uno sconosciuto per troppi webdev Wednesday, May 22, 13
  • 46. L’OBIETTIVO: Costruire un sistema libero da lock! Wednesday, May 22, 13
  • 48. LA RISPOSTA: Tutto in un solo thread Wednesday, May 22, 13
  • 49. LA RISPOSTA: Tutto in un solo thread Migliora? Wednesday, May 22, 13
  • 50. LA RISPOSTA: Tutto in un solo thread Migliora? SI! Si possono evitare tutti i problemi derivanti dai lock! Wednesday, May 22, 13
  • 51. LA RISPOSTA: Tutto in un solo thread Migliora? 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
  • 53. JAVASCRIPT Negli ultimi anni ha preso sempre piu’ piede Wednesday, May 22, 13
  • 54. JAVASCRIPT Negli ultimi anni ha preso sempre piu’ piede Tutti i maggiori browser stavano gia’ “combattendo su js” Wednesday, May 22, 13
  • 55. JAVASCRIPT Negli ultimi anni ha preso sempre piu’ piede Tutti i maggiori browser stavano gia’ “combattendo su js” Nel 2008 era stato rilasciatoV8 Wednesday, May 22, 13
  • 56. JAVASCRIPT Negli ultimi anni ha preso sempre piu’ piede Tutti i maggiori browser stavano gia’ “combattendo su js” Nel 2008 era stato rilasciatoV8 Ha le caratteristiche adatte: Wednesday, May 22, 13
  • 57. JAVASCRIPT Negli ultimi anni ha preso sempre piu’ piede Tutti i maggiori browser stavano gia’ “combattendo su js” Nel 2008 era stato rilasciatoV8 Ha le caratteristiche adatte: Closures Wednesday, May 22, 13
  • 58. JAVASCRIPT Negli ultimi anni ha preso sempre piu’ piede Tutti i maggiori browser stavano gia’ “combattendo su js” Nel 2008 era stato rilasciatoV8 Ha le caratteristiche adatte: Closures Funzioni anonime Wednesday, May 22, 13
  • 59. JAVASCRIPT Negli ultimi anni ha preso sempre piu’ piede Tutti i maggiori browser stavano gia’ “combattendo su js” Nel 2008 era stato rilasciatoV8 Ha le caratteristiche adatte: Closures Funzioni anonime Non e’ usato al di fuori dei browser Wednesday, May 22, 13
  • 60. JAVASCRIPT Negli ultimi anni ha preso sempre piu’ piede Tutti i maggiori browser stavano gia’ “combattendo su js” Nel 2008 era stato rilasciatoV8 Ha le caratteristiche adatte: Closures Funzioni anonime Non e’ usato al di fuori dei browser Quindi non ha preconcetti su come fare le cose. Wednesday, May 22, 13
  • 62. NASCE NODE.JS Viene presentato alla javascript conf di Berlino Wednesday, May 22, 13
  • 63. NASCE NODE.JS Viene presentato alla javascript conf di Berlino La prima app di demo: un IRC Server, 400 linee di codice! Wednesday, May 22, 13
  • 64. NASCE NODE.JS Viene presentato alla javascript conf di Berlino La prima app di demo: un IRC Server, 400 linee di codice! Ed e’ fatto per costruire network servers! Wednesday, May 22, 13
  • 65. NASCE NODE.JS Viene presentato alla javascript conf di Berlino La 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 molti Wednesday, May 22, 13
  • 66. NASCE NODE.JS Viene presentato alla javascript conf di Berlino La 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 molti E’ adatto alla Cloud* per sua natura. *Una volta si chiamava internet Wednesday, May 22, 13
  • 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 cicli Wednesday, May 22, 13
  • 69. ASYNC E NEXTTICK le applicazioni node girano in un singolo thread Wednesday, May 22, 13
  • 70. ASYNC E NEXTTICK Le applicazioni node girano in un singolo thread Questo comporta che ad ogni dato momento viene eseguito solo un task nell’event loop Wednesday, May 22, 13
  • 71. ASYNC E NEXTTICK Le applicazioni node girano in un singolo thread Questo comporta che ad ogni dato momento viene eseguito solo un task nell’event loop Possiamo immaginare l’event loop come una coda di callback Wednesday, May 22, 13
  • 72. ASYNC E NEXTTICK Le applicazioni node girano in un singolo thread Questo comporta che ad ogni dato momento viene eseguito solo un task nell’event loop Possiamo immaginare l’event loop come una coda di callback Ad ogni tick dell’event loop viene eseguida una delle callback nella coda Wednesday, May 22, 13
  • 73. ASYNC E NEXTTICK Le applicazioni node girano in un singolo thread Questo comporta che ad ogni dato momento viene eseguito solo un task nell’event loop Possiamo immaginare l’event loop come una coda di callback Ad ogni tick dell’event loop viene eseguida una delle callback nella coda Non c’e’ concorrenza ne’ multicore Wednesday, May 22, 13
  • 74. User NODE NODE Client Web Engine Database Logging facility Mass storage (big slow disk) DB Disk ESEMPIO DI ARCHITETTURA In questo modo i logs non rallentano piu’ i processi critici Wednesday, May 22, 13
  • 75. backend server Mobile client NodeJs instances Mobile Client ESEMPIO: LINKEDIN Linkedin usa node.js come middleware layer tra il backend e le applicazioni mobile Wednesday, May 22, 13
  • 76. UN CASO COMPLESSO Il backend di SaveThe Mom e’ tutto in node.js e ne sfrutta pesantemente il modello asincrono con l’aiuto di bus e code Wednesday, May 22, 13