Node.js è una piattaforma costruita sul runtime JavaScript V8 di Chrome per sviluppare velocemente e facilmente applicazioni di rete scalabili. Node.js utilizza un modello event-driven e operazioni I/O non-blocking che lo rende leggero ed efficiente, ideale per applicazioni real-time semplici o enterprise per dispositivi distribuiti.
Ma quali del successo di Node.js? Node.js è una tecnologia lato server con un modello di I/O asincrono basato sugli eventi, modello particolarmente adatto ad essere programmato in JavaScript e per le applicazioni web.
La normale procedura di esecuzione di una applicazione server-side, scritta ad esempio in PHP, prevede lo scorrere di una serie di istruzioni che coinvolgono di frequente chiamate a servizi esterni come ad esempio query per un database, o l'accesso al filesystem per operazioni di lettura e scrittura. Tutti questi eventi sono bloccanti, vale a dire che l'esecuzione dello script viene fermata finché non riceve una risposta dal componente esterno a cui l'ha richiesta.
In tal modo il web server impiega la maggior parte del proprio tempo attendendo che i processi bloccati si completino, e questo porta ad una vistosa inefficienza nello sfruttamento delle risorse a disposizione.
Il modello su cui si basa Node.js è quello event-driven, anzichè il classico modello a processi o thread concorrenti. Ciò significa che si eseguono azioni solo al verificarsi di un evento, rimane in sleep fino alla notifica del completamento quindi si riattiva per eseguire istruzioni contenute in una funzione callback. Questo meccanismo asincrono è abbastanza noto per chi usa Ajax: ad esempio, quando un’istruzione richiede un valore ad un server remoto, come nel caso di una chiamata Ajax, l’esecuzione del codice non si ferma in attesa del risultato ma prosegue, “saltando” l’istruzione che effettua la chiamata. Tale istruzione rimane in uno stato di “limbo”, perché è stata eseguita ma non completata: nel frattempo vengono eseguite le istruzioni successive. Quando la chiamata remota viene completata il controllo dell’esecuzione torna all’istruzione che era stata sospesa.
Questo metodo dovrebbe garantire una certa efficenza e dovrebbe permettere l’ottimizzazione delle performance, perché quando lavoriamo sul Web i tempi di attesa tra una richiesta HTTP e l’altra sono tempi molto lunghi rispetto ai tempi di lavoro del processore, per cui sarebbe uno spreco restare in attesa di una risposta.
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.