Differenze tra Node.js e linguaggi backend classici
(PHP, Java, C#, Python, Ruby)

Tempo di lettura: 3 minuti
Comparazione web server tra Node.js e linguaggi tradizionali come PHP, Java, C#, Python, Ruby

Se sei uno sviluppatore backend e usi quotidianamente linguaggi come PHP, Java, C# o addirittura Python e Ruby per la creazione di siti web e API, sono sicurissimo ti sarai posto almeno una volta la fatidica domanda:

  Perché Node ha riscosso così tanto successo nello sviluppo backend e cos’ha di diverso rispetto ai linguaggi più classici?

In questo articolo troverai finalmente la risposta che cercavi! Confronteremo il funzionamento dei web server tradizionali (Apache, Tomcat, IIS, ecc) con un web server Node, nello specifico analizzeremo la gestione delle richieste, ovvero: “cosa fa esattamente il server quando arriva un visitatore nel sito? come gestiscono la richiesta o più richieste?“.

È proprio in questo che si trova il segreto di Node.js, non fa altro che gestire le richieste in maniera differente e questo cambiamento porta enormi vantaggi in termini di velocità ed efficienza.

Web server tradizionali

Anche se l’ho già detto più e più volte è sempre bene rimarcarlo: Node.js è una tecnologia di “basso livello”. Un livello molto basso per gli standard dello sviluppo web moderno, sarai costretto a fare cose a cui non sei abituato, tutto per creare un semplice sito.

Hai mai creato un sito da zero? Per farlo è necessario un web server (come Apache o Nginx) e un linguaggio linguaggio (ad esempio PHP), queste due entità sono separate e ognuna svolge un compito:

  • Il web server (Apache) gestisce le richieste HTTP verso il server (fatte dai visitatori del sito). Il suo ruolo essenzialmente è quello di gestire il traffico dei dati in ingresso e in uscita.
  • Il linguaggio lato server (PHP) esegue il codice e invia il risultato ad Apache, che a sua volta lo invia al visitatore.

Prova a pensare al caso in cui più visitatori visitino la stessa pagina contemporaneamente, quello che accadrà nel server è questo:

Apache gestirà le richieste e creerà un thread per ciascuna (multithread). Ogni thread usa un processore diverso sul server (o un core del processore) e andrà ad attivare il codice PHP corrispondente.

Come i linguaggi backend classici gestiscono le richieste HTTP
Come i linguaggi backend classici gestiscono le richieste HTTP

Essenzialmente, più i nostri server sono potenti, più thread si riescono a gestire simultaneamente e di conseguenza più visitatori il nostro sito può ospitare nello stesso istante.

Web server in Node.js

Node.js fa qualcosa di diverso, non si avvale di un web server HTTP come Apache, anzi… Tocca a noi sviluppatori scriverne uno! (Ecco perché è di basso livello)

Scrivere un web server con le tue mani, non è fantastico?

Inoltre, se su Apache veniva creato un thread per ogni richiesta, su Node.js abbiamo un solo thread che gestisce tutte le richieste! Per questo viene chiamato monothread o singlethread.

  Coooosa?

Io credevo che Node.js fosse in grado di gestire tantissime richieste contemporaneamente in maniera velocissima!

Se ha un solo thread come fa a gestire più richieste?

Chiariamo la situazione:

È vero, avere un solo thread perenne vuol dire poter gestire solo una richiesta alla volta e poter sfruttare solo un core del processore… Tuttavia, lo fa in modo MOLTO efficiente, e questo lo rende ancora più veloce!

Questo perché Node è orientato agli eventi e usa il modello non bloccante. Non appena si accorge di dover gestire un’operazione bloccante (query sul db, accesso al disco, ecc) la avvia ma non rimane in attesa che finisca, e continua con l’esecuzione del codice fintanto che non si verifica l’evento di operazione terminata.

Node.js è singlethread/monothread e si basa su eventi
Node.js è singlethread/monothread e si basa su eventi

 

Questi sono concetti un po’ particolare quindi  se hai qualche dubbio sappi che è normale. Per adesso direi che abbiamo parlato abbastanza di teoria, adesso conosci i vari concetti fondamentali di Node.js (monothread, eventi, operazioni bloccanti, programmazione asincrona, callback, ecc.) ma non hai ancora avuto modo di vederlo in azione quindi è decisamente arrivato il momento di passare alla pratica!

Nel prossimo articolo ti guiderò in un esercizio pratico: il tuo primo web server con Node.js.


L’articolo che hai appena letto fa parte di una lunga serie di guide e tutorial tradotte in italiano e distribuite gratuitamente. Questo articolo si basa sui testi inglesi di Mathieu Nebra (Ultra fast applications using Node.js), con licenza CC BY-NC-SA.