Introduzione a Node.js

17 aprile 2012

Node.js è un framework per realizzare applicazioni Web in JavaScript, permettendoci di utilizzare questo linguaggio, tipicamente utilizzato nella “client-side”, anche per la scrittura di applicazioni “server-side”.

La piattaforma è basata sul JavaScript Engine V8, che è il runtime di Google utilizzato anche da Chrome e disponibile sulle principali piattaforme, anche se maggiormente performante su sistemi operativi UNIX-like.

Approccio asincrono

La caratteristica principale di Node.js risiede nella possibilità che offre di accedere alle risorse del sistema operativo in modalità event-driven e non sfruttando il classico modello basato su processi o thread concorrenti, utilizzato dai classici web server.

Il modello event-driven, o “programmazione ad eventi”, si basa su un concetto piuttosto semplice: si lancia una azione quando accade qualcosa. Ogni azione quindi risulta asincrona a differenza dei pattern di programmazione più comune in cui una azione succede ad un’altra solo dopo che essa è stata completata.

Ciò dovrebbe garantire una certa efficienza delle applicazioni grazie ad un sistema di callback gestito a basso livello dal runtime.

L’efficienza dipenderebbe dal considerare che le azioni tipicamente effettuate riguardano il networking, ambito nel quale capita spesso di lanciare richieste e di rimanere in attesa di risposte che arrivano con tempi che, paragonati ai tempi del sistema operativo, sembrano ere geologiche.

Grazie al comportamento asincrono, durante le attese di una certa azione il runtime può gestire qualcos’altro che ha a che fare con la logica applicativa, ad esempio.

Figura 1. Differenza tra esecuzione asincrona e sincrona
(clic per ingrandire)

Differenza tra esecuzione asincrona e sincrona

Ma differenza non è soltanto teorica, impatta invece notevolmente il modo in cui è scritto il codice. La nota positiva che la maggior parte degli sviluppatori JavaScript ha già familiarità con questo approccio in quanto viene utilizzato sia per le chiamate AJAX, asincrone per definizione, sia per la gestione degli eventi dei componenti dell’interfaccia.

Per capire ancora meglio ecco un breve snippet di pseudo-codice che mette in risalto la differenza tra i due approcci:

/** approccio sincrono (classico) **/
var dato = ottieniDatoDaRemoto(url); 
alert(dato);

In questo caso l’esecuzione aspetta la ricezione dei dati prima di effettuare l’alert.

/** approccio ad eventi (asincrono) **/
ottieniDatoDaRemoto(url, function(dato) {
  alert(dato);
}); //la funzione ritorna subito

In questo caso invece l’azione da effettuare una volta ottenute le informazioni richieste non è stata scritta direttamente dopo la prima, ma è stata passata come parametro alla funzione ottieniDatoDaRemoto. sotto forma di funzione callback.

L’engine in questo caso si comporta mettendo in pausa la callback in attesa che la funzione esterna ottenga il dato ma non bloccando il resto dell’applicazione.

In Node.js spesso il comportamento dell’applicazione rispecchierà l’approccio event-oriented, portandoci ad affrontare i problemi ragionando per callback.

Stato dell’arte

La prima release di Node.js risale al 2009 ed è stata sponsorizzata dalla società californiana Joyent. Ha raggiunto la popolarità in tempi molto brevi ed attualmente l’ultima release disponibile è la 0.6.13 rilasciata il 15 marzo del 2012. I rilasci sono molto frequenti per cui è molto probabile che durante i tempi di stesura del presente articoli ci saranno ulteriori minor release.

Installare Node.js

L’installazione di Node.js è abbastanza semplice. Dal sito ufficiale è possibile scaricare l’installer di Node.js per Windows e per Mac e il codice sorgente. Node.js è comunque disponibile nei principali repository per sistemi operativi Linux.

Una volta installato avremo a disposizione nuovi comandi:

  • node che permette di eseguire un’applicazione contenuta in un file passato come parametro
  • node-waf, un tool per facilitare la creazione di nuovi moduli per Node.js.
  • npm, il potentissimo package manager, utilissimo per scaricare e installare numerose applicazioni e plugin.

Per controllare che l’installazione sia stata eseguita con successo è possibile richiamare il terminale tramite il comando node senza nessun parametro.

$ node
> console.log(1)
1

Se riceviamo 1 come risposta, avremo la certezza che l’installazione è andata a buon fine!

Link utili

Tutte le lezioni

 

1 2 3... 15

Se vuoi aggiornamenti su Introduzione a Node.js inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Introduzione a Node.js

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento dei dati per attività di marketing