
Cosa è Node.js
Elenco argomenti trattati:
- Che cos’è Node.js?
- Come funziona Node.js
- Perché utilizziamo NodeJs?
- Caratteristiche di NodeJs
- Node.js è un linguaggio di programmazione?
Se parliamo di qualsiasi applicazione, la parte con cui l’utente interagisce è fondamentalmente il frontend del nostro sito web, mentre ci sono molte cose che accadono in background o nel backend del nostro sito web. Fondamentalmente ci sono tre parti di qualsiasi applicazione, una è il frontend con cui gli utenti interagiscono, poi arriva il server backend e il database backend. Per i server backend possiamo usare NodeJS, Java, Python, ecc. e per i database backend utilizziamo database relazionali o non relazionali.
Ora cerchiamo innanzitutto di capire cos’è NodeJS .
Ogni volta che un client richiede qualcosa dal lato client dell’applicazione, ciò che accade è che la richiesta viene prima inviata al server e poi in quel server vengono eseguite alcune elaborazioni o calcoli per la convalida della richiesta lato client e dopo aver eseguito tutte queste convalide viene inviata una risposta al lato client. Per eseguire tutti questi calcoli ed elaborazioni, viene utilizzato questo framework Node.Js di JavaScript.
Per eseguire le nostre applicazioni web al di fuori del browser del cliente, NodeJS è fondamentalmente utilizzato come un ambiente di runtime JavaScript open source e multipiattaforma. Si utilizza per eseguire le applicazioni lato server. Per creare applicazioni I/O intensive come siti di streaming video, applicazioni di chat online e molte altre applicazioni. Molte aziende affermate, colossi tecnologici e start-up di nuova creazione utilizzano il framework NodeJs nella loro azienda.
Nel 2009, NodeJs è stato sviluppato da un ragazzo chiamato Ryan Dahla e le versioni di NodeJs si aggiornano periodicamente (vedi le releases QUI).
Che cos’è Node.js?
Node.js è un ambiente di runtime JavaScript open source e multipiattaforma e una libreria per l’esecuzione di applicazioni Web al di fuori del browser del client. Ryan Dahl lo ha sviluppato nel 2009 e le sue versioni vengono costantemente aggiornate . Gli sviluppatori utilizzano Node.js per creare applicazioni Web lato server ed è perfetto per applicazioni ad alta intensità di dati poiché utilizza un modello asincrono basato sugli eventi.
Ora che sappiamo cos’è Node, vediamo perché è così diffuso nello sviluppo web.
Come funziona Node.js
Node.js è un ambiente di runtime che consente l’esecuzione di JavaScript sul lato server. È basato sul motore JavaScript V8 di Chrome, che compila JavaScript in codice macchina efficiente. Node.js opera su un’architettura basata su eventi a thread singolo, utilizzando un ciclo di eventi per gestire più operazioni simultanee senza blocchi.
Quando un client invia una richiesta a un server Node.js, la richiesta viene aggiunta a una coda di eventi. Il ciclo di eventi controlla continuamente questa coda ed elabora ogni richiesta. Se una richiesta comporta un’operazione di I/O, Node.js la scarica sul kernel di sistema, che la gestisce in modo asincrono. Una volta completata l’operazione di I/O, il kernel notifica Node.js, eseguendo la funzione di callback corrispondente.
Questo modello I/O non bloccante e basato sugli eventi consente a Node.js di gestire in modo efficiente numerose connessioni simultanee, rendendolo ideale per la creazione di applicazioni di rete scalabili e ad alte prestazioni.
Perché utilizzare NodeJs?
Ci sono molte ragioni per cui preferire di usare NodeJs per il lato server della nostra applicazione, alcune delle quali sono discusse di seguito:
- NodeJs è basato sul motore V8 di Google Chrome e per questo motivo il suo tempo di esecuzione è molto rapido e funziona molto velocemente.
- Ci sono più di 50.000 bundle disponibili in Node Package Manager e per questo motivo gli sviluppatori possono importare qualsiasi pacchetto in qualsiasi momento in base alle funzionalità necessarie, con un notevole risparmio di tempo.
- Poiché NodeJs non ha bisogno di attendere che un’API restituisca dati, è molto utile per creare applicazioni web in tempo reale e ad alta intensità di dati. È totalmente asincrono per natura, il che significa che è totalmente non bloccante.
- Il tempo di caricamento di un file audio o video viene ridotto da NodeJs perché c’è una migliore sincronizzazione del codice tra client e server avendo la stessa base di codice.
- Poiché NodeJs è open source e non è altro che un framework JavaScript, per gli sviluppatori che hanno già familiarità con JavaScript, iniziare a sviluppare i propri progetti con NodeJs è molto semplice.
Caratteristiche di NodeJs
Ora parliamo di alcune delle funzionalità di NodeJs:
Di natura asincrona e guidata dagli eventi
I server realizzati con NodeJs non attendono mai i dati da un’API. Senza attendere i dati dall’API, si spostano direttamente all’API successiva. Quindi tutte le API di NodeJS sono totalmente non bloccanti per natura. Per ricevere e tracciare tutte le risposte delle richieste API precedenti, segue un meccanismo basato sugli eventi. Quindi possiamo dire che tutte le API di NodeJs sono non bloccanti per natura.
Architettura a thread singolo
Con l’event looping, un’architettura a thread singolo è seguita da NodeJs e per questa architettura NodeJs è più scalabile. A differenza di altri server, vengono creati thread limitati per elaborare le richieste. Mentre per il meccanismo event-driven, i server NodeJS rispondono in modo non bloccante o asincrono e per questo motivo NodeJS diventa più scalabile. Se confrontiamo NodeJs con altri server tradizionali come i server Apache HTTP, allora possiamo dire che NodeJs gestisce un numero maggiore di richieste. Un programma a thread singolo è seguito da NodeJS e questo consente a NodeJS di elaborare un’enorme quantità di richieste.
Scalabile
Al giorno d’oggi, la maggior parte delle aziende richiede software scalabile. Una delle preoccupazioni più urgenti nello sviluppo software è affrontata da NodeJs, ovvero la scalabilità. Le richieste simultanee possono essere gestite in modo molto efficiente utilizzando NodeJs. Un modulo cluster è utilizzato da NodeJs per gestire il bilanciamento del carico per tutti i core CPU attivi. La caratteristica più interessante di NodeJs è che può partizionare le applicazioni orizzontalmente e questa procedura di partizione è ottenuta principalmente da esso grazie all’utilizzo di processi figlio. Utilizzando questa caratteristica, le distinte versioni dell’app sono fornite ai diversi target di pubblico e anche per la personalizzazione consente loro di soddisfare le preferenze del cliente.
Tempo di esecuzione rapido per il codice
Il motore runtime V8 JavaScript è utilizzato da NodeJs e anche da Google Chrome. Un wrapper è fornito per JavaScript dall’hub e per questo motivo il motore runtime diventa più veloce e per questo motivo all’interno di NodeJs, anche il processo di preposizione delle richieste diventa più veloce.
Compatibilità sulle piattaforme multiple
Diversi tipi di sistemi come Windows, UNIX, LINUX, MacOS e altri dispositivi mobili possono usare NodeJs. Per generare un’esecuzione autosufficiente, può essere abbinato a qualsiasi pacchetto appropriato.
Utilizza JavaScript
Dal punto di vista di un ingegnere/informatico, un aspetto molto importante di NodeJs è che questo framework utilizzi JavaScript. La maggior parte degli sviluppatori ha familiarità con JavaScript, quindi per loro diventa molto più facile apprendere NodeJs.
Streaming dati veloce
Il tempo di elaborazione dei dati trasmessi a diversi flussi richiede molto tempo. Mentre per l’elaborazione dei dati, NodeJs impiega pochissimo tempo e lo fa a una velocità molto elevata. NodeJs fa risparmiare molto tempo perché i file vengono elaborati e caricati simultaneamente da NodeJs. Quindi, di conseguenza, la velocità complessiva dello streaming di dati e video è migliorata da NodeJs.
Nessun buffering
I dati non vengono mai memorizzati nel buffer nell’applicazione NodeJs.
Node.js è un linguaggio di programmazione?
Node.js non è un linguaggio di programmazione; è un ambiente di runtime che consente di eseguire codice JavaScript sul lato server, al di fuori di un browser web. Basato sul motore JavaScript V8 di Chrome, Node.js compila JavaScript in codice macchina per un’esecuzione efficiente. Estende le capacità di JavaScript fornendo funzionalità e librerie aggiuntive per lo sviluppo lato server, come l’accesso al file system, la comunicazione di rete e le operazioni I/O asincrone.
Sebbene JavaScript sia il linguaggio di programmazione utilizzato con Node.js, l’ambiente di runtime fornisce gli strumenti e i framework per creare applicazioni server scalabili e ad alte prestazioni. L’architettura non bloccante e basata sugli eventi di Node.js lo rende ideale per applicazioni in tempo reale, server Web, API e altro ancora. In sintesi, Node.js è un ambiente robusto che sfrutta JavaScript per abilitare la programmazione lato server, ma non è un linguaggio di programmazione.
Architettura di Node.js
Ora che abbiamo stabilito cos’è Node, approfondiamo la sua architettura. Node.js opera su un singolo thread, il che gli consente di gestire migliaia di loop di eventi simultanei. Ecco un diagramma che illustra al meglio l’architettura di Node.js.

Parti di Node.js

Ora esaminiamo ogni parte di Node.js per comprendere meglio la piattaforma lato server nel suo complesso.
Moduli
I moduli sono come librerie JavaScript che possono essere utilizzate in un’applicazione Node.js per includere un set di funzioni. Per includere un modulo in un’applicazione Node.js, utilizzare la funzione require() con la parentesi contenente il nome del modulo.
Modulo in Node.js

Node.js ha molti moduli che forniscono le funzionalità di base necessarie per un’applicazione web. Alcuni di essi sono menzionati in questa tabella:
Tabella dei moduli Node.js
Moduli | Descrizione |
http | include classi, metodi, eventi per creare http server Nodejs |
util | include funzionalità utili per gli sviluppatori |
fs | include classi, metodi, eventi per gestire le operazioni I/O sui file |
url | include metodi per URL parsing |
querystring | include metodi per operare con query string |
stream | include metodi per gestire lo streaming dei dati |
zlib | include metodi per comprimere o decomprimere i file |
Consolle
La console è un modulo che fornisce un metodo per il debugging simile alla console JavaScript di base fornita dai browser Internet. Stampa messaggi su stdout e stderr.
Cluster
Node.js è basato sul concetto di programmazione single-threaded. Il Cluster è un modulo che consente il multi-threading creando processi figlio che condividono la stessa porta server e vengono eseguiti simultaneamente.
Un cluster può essere aggiunto a un’applicazione.
Global
Gli oggetti globali in Node.js sono disponibili in tutti i moduli. Questi oggetti sono funzioni, moduli, stringhe, ecc.
Gestione degli errori
Le applicazioni Node.js riscontrano quattro tipi di errori:
- standard javascript error
- system error
- user-specific error
- assertion error
Gli errori in Node.js vengono gestiti tramite eccezioni. Ad esempio, gestiamo l’errore che si verificherebbe quando dividiamo un numero per zero. Questo errore causerebbe l’arresto anomalo dell’applicazione Node.js, quindi dovremmo gestire questo errore per continuare con la normale esecuzione dell’applicazione.
Streaming
I flussi sono gli oggetti che ti permettono di leggere o scrivere dati in modo continuo. Ci sono quattro tipi di flussi:
- Leggibili: sono i tipi di flussi da cui è possibile leggere i dati
- Scrivibili: sono i tipi di flussi su cui è possibile scrivere i dati
- Duplex: sono flussi sia leggibili che scrivibili
- Trasformazione: flussi che possono manipolare i dati durante la lettura o la scrittura
Buffer
Buffer è un modulo che consente la gestione di flussi che contengono solo dati binari. Un buffer vuoto di lunghezza ’10’ può essere creato con questo metodo:
Dominio
Il modulo di dominio intercetta gli errori che rimangono non gestiti. Per intercettare questi errori vengono utilizzati due metodi:
- Binding interno: l’emettitore di errori esegue il suo codice all’interno del metodo run
- Associazione esterna: l’emettitore di errori viene aggiunto esplicitamente a un dominio tramite il suo metodo add
Il DNS
Il modulo DNS viene utilizzato per connettersi a un server DNS ed eseguire la risoluzione dei nomi utilizzando il seguente metodo:
dns.resolve()
Il modulo DNS viene utilizzato anche per eseguire la risoluzione dei nomi senza una comunicazione di rete utilizzando il seguente metodo:
dns.lookup()
Debugger
Node.js include un’utilità di debug a cui è possibile accedere tramite un client di debug incorporato. Il debugger di Node.js non è ricco di funzionalità, ma supporta la semplice ispezione del codice. Il debugger può essere utilizzato nel terminale utilizzando la parola chiave ‘inspect’ prima del nome del file JavaScript. Per ispezionare un file, ad esempio myscript.js, puoi seguire questo metodo:
$ node inspect myscript.js
Ora che abbiamo familiarizzato con le parti principali di Node.js, andiamo avanti e scopriamo di più sul framework Node.js Express.
Framework Node.js Express
Express è un framework flessibile per applicazioni web Node.js che fornisce un’ampia serie di funzionalità per sviluppare applicazioni web e mobili. È un layer costruito sulla parte superiore di Node.js che aiuta a gestire un server e i percorsi.
Diamo ora un’occhiata ad alcune delle funzionalità principali del framework Express:
- Utilizzato per la progettazione di applicazioni web monopagina, multipagina e ibride
- Consente agli sviluppatori di impostare middleware per rispondere alle richieste HTTP
- Definisce una tabella di routing utilizzata per eseguire diverse azioni in base al metodo HTTP e all’URL
- Consente il rendering dinamico delle pagine HTML in base al passaggio di argomenti ai modelli
Ora prendiamo in esame un esempio di un semplice programma “Hello World” sviluppato utilizzando il framework Express per comprendere meglio tale framework.

- var express: importazione del framework Express nella nostra applicazione Node.js
- app.get(): Funzione di callback con parametri ‘richiesta’ e ‘risposta’
- Oggetto richiesta: rappresenta la richiesta HTTP e ha proprietà per la stringa di query della richiesta, parametri, corpo, intestazioni HTTP, ecc.
- Oggetto risposta: rappresenta la risposta HTTP che un’app Express invia quando riceve una richiesta HTTP.
- L’applicazione ascolterà la porta definita, che in questo caso è “8081”, e le variabili “host” e “port” conterranno rispettivamente l’indirizzo e la porta.
- console.log: serve a mostrare l’indirizzo e la porta nel prompt dei comandi o nel terminale.
Dopo aver appreso la conoscenza del framework Express, passiamo ora ai casi d’uso di Node.js.
Applicazioni di Node.js
Node.js è un ambiente di runtime versatile ampiamente utilizzato per la creazione di varie applicazioni grazie alla sua efficienza e scalabilità. Ecco alcune applicazioni tipiche di Node.js:
- Server Web: Node.js è ideale per creare server Web veloci e scalabili, in grado di gestire numerose connessioni simultanee con elevata produttività.
- Applicazioni in tempo reale: eccelle nelle applicazioni in tempo reale come applicazioni di chat, giochi online e strumenti di collaborazione in tempo reale, in cui gli aggiornamenti dei dati in tempo reale sono essenziali.
- API e microservizi: Node.js è comunemente utilizzato per creare API RESTful e microservizi, facilitando la comunicazione tra i servizi in un’architettura distribuita.
- Applicazioni a pagina singola (SPA): Node.js gestisce la logica backend per le applicazioni a pagina singola, migliorando l’esperienza utente con aggiornamenti fluidi e dinamici dei contenuti.
- Applicazioni di streaming: la sua natura asincrona rende Node.js adatto alle applicazioni di streaming di dati, come i servizi di streaming video o l’elaborazione di dati in tempo reale.
- Strumenti da riga di comando: gli sviluppatori utilizzano Node.js per creare strumenti da riga di comando e script che automatizzano varie attività, sfruttando il suo ricco ecosistema di pacchetti.
- Internet of Things (IoT): grazie alla sua architettura basata sugli eventi, Node.js viene utilizzato nelle applicazioni IoT per gestire dati provenienti da numerosi dispositivi in tempo reale.
Chi usa NodeJs?
Bene, nel 2024 ci saranno più di 15 aziende famose che utilizzeranno NodeJs.
Aziende come NASA, Trello, Netflix, PayPal, LinkedIn, Walmart, Uber, Twitter, Yahoo, eBay, GoDaddy ecc. utilizzano NodeJs.
Casi d’uso di Node.js
Netflix
Netflix, la rete di intrattenimento online leader al mondo con oltre 167 milioni di utenti, è una delle tante aziende leader che si affidano a Node.js per i propri server. I motivi per cui l’azienda ha scelto di utilizzare Node.js includono:
- Scalabilità delle applicazioni
- Applicazione ad alta intensità di dati
Ecommerce Walmart
Walmart è la più grande azienda al mondo per fatturato, con 559 miliardi di dollari nel 2020, secondo Forbes . Walmart ha scelto Node.js per i seguenti attributi:
- I/O asincrono
- Gestione efficiente delle richieste simultanee
Uber
Uber è una società multinazionale di ride-hailing con sede negli Stati Uniti che offre servizi che includono peer-to-peer ridesharing, ride service hailing e food delivery. I motivi per cui la società ha scelto di utilizzare Node.js includono:
- I/O asincrono
- Iterazioni rapide
- Comunità open source attiva
NASA
La NASA, un’agenzia indipendente del governo federale degli Stati Uniti, è responsabile del programma spaziale civile, nonché della ricerca aerospaziale e aeronautica. La NASA ha scelto di utilizzare Node.js per i seguenti motivi:
- Tempi di accesso ridotti
- Capacità di gestire attività ad alta intensità di dati
- Capacità di mantenere il server attivo 24 ore su 24, 7 giorni su 7
Pagamenti tramite PayPal
PayPal è una società con sede negli Stati Uniti che gestisce un sistema di pagamento online globale che supporta i trasferimenti di denaro online, che funge da alternativa elettronica ai tradizionali metodi cartacei come assegni e money order. PayPal ha scelto di utilizzare Node.js per i seguenti motivi:
- Tempi di costruzione estremamente rapidi
- Meno righe di codice
- Capacità di gestire grandi quantità di dati
NPM: Gestore pacchetti Node
NPM è una popolare libreria di pacchetti Node.js ed il gioiello della comunità Node.js. Ha milioni di librerie scaricabili, organizzate in base a requisiti specifici, ed è il più grande registro software al mondo. NPM è gratuito. Queste librerie stanno crescendo rapidamente fino ad oggi e rafforzano la comunità Node.js.
Quando possiamo usare NodeJS?
Quando il codice lato server utilizza pochissimi cicli di CPU. Quando le operazioni non bloccanti vengono eseguite da noi e non hanno lavori pesanti o algoritmi pesanti che consumano molti cicli di CPU.
Se abbiamo già un background in JavaScript e siamo molto a nostro agio nello scrivere codice single-thread, proprio come JavaScript lato client.
Quando non usare NodeJs?
- NodeJS è un’applicazione molto pesante per la CPU, quando si tratta di calcoli pesanti, NodeJS non è la migliore opzione a disposizione. Oltre a NodeJs, ci sono molte soluzioni migliori disponibili per applicazioni ad alta intensità di CPU.
Utilizzando una singola CPU, NodeJS sfrutta un modello I/O non bloccante basato su eventi e per tale motivo la richiesta in arrivo verrà effettivamente bloccata da tutta l’intensa attività di elaborazione della CPU. - Quando si usa NodeJs con applicazioni base crud o HTML non c’è bisogno di grandi speranze. Sebbene NodeJs lo renderà più scalabile, non c’è bisogno di aspettarsi un flusso di traffico solo perché l’applicazione è alimentata da NodeJs. Quindi quando i dati sono forniti direttamente dal server e specialmente quando non c’è bisogno di avere un’API separata, in questo caso non c’è bisogno di usare NodeJs.
- Per i progetti di tipo Relational database access, usare NodeJs non è affatto un’idea efficiente. In confronto alle altre tool box del framework, gli strumenti di database relazionale di NodeJs non sono così robusti, affidabili e facili da usare.
Procedura di installazione di NodeJs.
Quindi per l’installazione di NodeJs, dobbiamo seguire un processo molto semplice. Questo può essere fatto tramite il pacchetto di installazione disponibile sul sito Web ufficiale di NodeJs.
- Per prima cosa, è necessario scaricare il programma di installazione dal sito Web ufficiale di NodeJs.
- E’ necessario eseguire il programma di installazione.
- Seguire correttamente i semplici passaggi dell’installatore. È necessario accettare il contratto di licenza e quindi fare clic sul pulsante Avanti.
- Quindi il nostro sistema o la tua macchina ha bisogno di un riavvio. Ecco fatto, abbiamo terminato l’installazione di NodeJs.
Finora abbiamo avuto una buona idea su NodeJs e quando ci siamo resi conto che avremmo dovuto usarlo per la nostra applicazione lato server.
Comprendere la popolarità di Node.js
Node.js ha attirato l’attenzione di aziende e organizzazioni di tutti i settori. Non è una sorpresa, considerando la sua versatilità e il forte supporto della comunità. Come puoi vedere dai casi d’uso menzionati in precedenza, ci sono alcuni attori piuttosto importanti che usano Node.js, organizzazioni e aziende come NASA, Uber, PayPal e Netflix.
Popolarità e utilizzo
- Si stima che oltre 6,3 milioni di siti web siano basati su Node.js [Radixweb].
- Lo Stack Overflow Developer Survey 2023 indica che Node.js rimane la tecnologia web più popolare, con il 42,65% degli sviluppatori che la utilizzano [Bacancy Technology, Agile Infoways]. Tra questi rientrano sviluppatori professionisti (42,73%), sviluppatori alle prime armi (42,44%) e altri (42,07%) [Agile Infoways].
- Si prevede che entro la fine del 2023 gli sviluppatori Node.js raggiungeranno i 27 milioni a livello globale [esparkinfo.com].
Adozione aziendale
Oltre 262.000 aziende hanno preso in considerazione Node.js come strumento di sviluppo [Agile Infoways].
Circa il 43% degli sviluppatori utilizza Node.js per creare applicazioni di livello aziendale [esparkinfo.com].
Preferenze della comunità e degli sviluppatori
Quasi il 95% degli sviluppatori Node.js utilizza database per i propri progetti [Radixweb].
L’86% degli sviluppatori utilizza un framework o una libreria front-end insieme a Node.js [Radixweb].
Il 78% dei download di Node.js è per Linux, il che indica una preferenza per gli ambienti open source [Radixweb].
Conclusione
Node.js è un ambiente di runtime potente e versatile che ha rivoluzionato la programmazione lato server portando JavaScript nel backend. Sfruttando il motore JavaScript V8, Node.js compila il codice in codice macchina efficiente, consentendo un’esecuzione ad alte prestazioni. Il suo modello I/O non bloccante basato sugli eventi consente agli sviluppatori di creare facilmente applicazioni scalabili e reattive in grado di gestire numerose connessioni simultanee. Dai server Web e applicazioni in tempo reale alle API e soluzioni IoT, il robusto ecosistema di Node.js e il ricco supporto di librerie lo rendono una scelta popolare tra gli sviluppatori.
In sostanza, Node.js estende le capacità di JavaScript oltre il browser, fornendo una piattaforma solida per lo sviluppo moderno lato server. Per migliorare ulteriormente le capacità di sviluppo e ampliare la propria competenza, consigliare di seguire un corso di formazione Node,js con Innovaformazione rivolto alle aziende.
(fonte)
Innovaformazione, scuola informatica specialistica promuove la cultura dello sviluppo web consapevole e moderno.
Nell’offerta formativa rivolta alle aziende troviamo il Corso Node.js.
INFO: info@innovaformazione.net – Tel. 3471012275 (Dario Carrassi)
Vuoi essere ricontattato? Lasciaci il tuo numero telefonico e la tua email, ti richiameremo nelle 24h:
Articoli correlati

Arriva Java 23

Sviluppo Software Green

Lavoro SAP Reggio Emilia

Cosa è Git branching

Algoritmi per il Poker online
