Node.js è un ambiente di programmazione in JavaScript che può operare sui server per la creazione, lo sviluppo e la gestione di siti e applicativi web.

Node nasce nel 2008 e in pochi anni si afferma come prodotto prima tra gli sviluppatori e quindi tra le società che vedono in questa piattaforma un modo più rapido ed efficace per raggiungere l'obiettivo di una presenza leader nel panorama del web.

Il problema

Ci siamo passati tutti: il nostro sito finalmente comincia a produrre risultati in termini di visite e contatti ma ci accorgiamo che comincia ad essere lento. Le pagine si caricano alla moviola, spesso restano parzialmente bianche e il browser continua a girare all'infinito. Ogni volta che proviamo a caricare nuovi contenuti è un'odissea in termini di velocità: lentezza esasperante ed errori in continuazione.

Ma il peggio è che i nostri visitatori cominciano a stancarsi della situazione, quindi invece che usare il nostro sito per acquistare prodotti o servizi preferiscono rivolgersi ai siti concorrenti che non offrono spesso servizi migliori ma che in compenso non ci impiegano un minuto solo per aprire la home page.

Disperati cerchiamo lumi. Siete su un hosting condiviso? Vi diranno di passare ad un server dedicato. Ma noi non siamo sistemisti, quindi dobbiamo spendere una cifra non indifferente per il trasferimento e la configurazione ottimizzata del sito. Stiamo perdendo clienti, quindi non possiamo aspettare oltre.

Con soddisfazione notiamo che il sito è tornato ad essere veloce, i visitatori cominciano a tornare e presto se ne aggiungono altri e poi altri. Ad un certo punto notiamo di nuovo dei rallentamenti, che presto cominciano a diventare rilevanti e dopo qualche tempo ci troviamo di nuovo al punto in cui eravamo partiti, nonostante abbiamo investito nel dare risorse (CPU, RAM, spazio su disco, cache ecc.) al nostro sito.

Quindi il punto non sono le risorse a disposizione, ma come la tecnologia con cui è sviluppato un sito usa queste risorse.

Perché Node: dettagli tecnici

Il primo punto di forza che ha permesso il successo di Node è la performance. Essendo basato su JavaScript, Node necessitava di un motore JavaScript ad alte prestazioni.

La scelta è caduta su V8. lo stesso motore scelto da Google per il browser Chrome. Tuttavia, eseguire il codice velocemente non era abbastanza: Node è stato sviluppato con un design basato sull' asincronicità delle operazioni e un modello di input/output non bloccante.

Cosa vuol dire? Che a differenza di quanto avviene con PHP nella gestione delle query ad un database, questo tipo di operazioni non pone Node in uno stato di blocco nell'attesa dei risultati. All'atto pratico questa scelta di design si concretizza in un risparmio delle ore di lavoro necessarie per implementare un sistema di caching delle query. Si è online prima e con prestazioni enormemente aumentate.

Un altro punto di forza è l'estendibilità. A differenza di quanto avviene in PHP, dove le estensioni sono compilate e non più modificabili una volta aggiunte al core, in Node tali estensioni prendono il nome di moduli e sono liberamente modificabili dagli sviluppatori che possono decidere sia di renderle pubbliche tramite NPM ( Node Package Manager ) che di mantenerle private limitandole al singolo progetto.

La sicurezza poi è un altra caratteristica di Node. In PHP, a meno che lo sviluppatore non abbia provveduto diversamente, i file eseguibili del linguaggio sono liberamente accessibili da remoto. Tecnicamente questo avviene perché il web server (solitamente Apache o nginx) per impostazione predefinita rende accessibili tutti i file caricati o creati nello spazio web.

In Node è lo sviluppatore che crea il web server tramite l'apposito modulo di Node e a meno di non rendere espliciti i percorsi dei file lato codice, tali file risultano irraggiungibili da remoto. Un controllo totale sui protocolli HTTP ed HTTPS interamente nelle mani di chi realizza il progetto.