Node.js

runtime JavaScript server-side

Node.js è un runtime system open source multipiattaforma orientato agli eventi per l'esecuzione di codice JavaScript, costruito sul motore JavaScript V8 di Google Chrome. Molti dei suoi moduli base sono scritti in JavaScript, e gli sviluppatori possono scrivere nuovi moduli nello stesso linguaggio di programmazione.

Node.js
software
Logo
Logo
GenereProgrammazione (non in lista)
SviluppatoreJoyent
Data prima versione27 maggio 2009
Ultima versione22.0.0 (24 aprile 2024)
Sistema operativoMultipiattaforma
LinguaggioJavaScript
C++
C
Licenzalicenza MIT
(licenza libera)
Sito webnodejs.org

In origine, JavaScript veniva utilizzato soprattutto lato client. In questo scenario gli script JavaScript, generalmente incorporati all'interno dell'HTML di una pagina web, vengono interpretati da un motore di esecuzione incorporato direttamente all'interno di un web browser. Node.js consente invece di utilizzare JavaScript anche per scrivere codice da eseguire lato server, ad esempio per la produzione del contenuto delle pagine web dinamiche, prima che la pagina venga inviata al browser dell'utente. Node.js in questo modo permette di implementare il cosiddetto paradigma "JavaScript everywhere" (JavaScript ovunque), unificando lo sviluppo di applicazioni Web intorno a un unico linguaggio di programmazione (JavaScript).

Node.js ha un'architettura orientata agli eventi che rende possibile l'I/O asincrono. Questo design punta ad ottimizzare il throughput e la scalabilità nelle applicazioni web con molte operazioni di input/output, è inoltre ottimo per applicazioni web sistema real-time (ad esempio programmi di comunicazione in tempo reale o browser game).

Node.js è un progetto di sviluppo open source distribuito gestito dalla Node.js Foundation e facilitato tramite il programma di progetti collaborativi della Linux Foundation.

Le aziende che supportano il programma includono GoDaddy, Groupon, IBM, LinkedIn, Microsoft, Netflix, PayPal, Rakuten, SAP, Voxer, Walmart e Yahoo!.

Storia modifica

 
Ryan Dahl

Node.js è stato originariamente creato da Ryan Dahl nel 2009, circa tredici anni dopo l'introduzione del primo ambiente JavaScript lato server, il Web LiveWire Pro di Netscape. La versione iniziale supportava solo Linux e Mac OS. Il suo sviluppo e la sua manutenzione erano guidati da Dahl e in seguito sponsorizzati da Joyent.

Nel giugno 2011 Microsoft e Joyent hanno implementato una versione Windows nativa di Node.js[1]. La prima build di Node.js che supporta Windows è stata rilasciata nel luglio 2011.

Nel gennaio 2012 Dahl si è fatto da parte, promuovendo il collega e creatore di npm Isaac Schlueter a gestire il progetto[2]. Nel gennaio 2014 Schlueter ha annunciato che Timothy J. Fontaine avrebbe guidato il progetto[3].

Nel dicembre 2014, Fedor Indutny ha avviato io.js, un fork di Node.js. A causa del conflitto interno sulla governance di Joyent, io.js è stata creata come alternativa di governance aperta con un comitato tecnico separato[4]. A differenza di Node.js[5] gli autori hanno pianificato di mantenere io.js aggiornato con le ultime versioni del motore JavaScript V8 di Google[6].

Nel febbraio 2015 è stata annunciata l'intenzione di formare una Fondazione Node.js neutrale. A giugno 2015 le comunità Node.js e io.js hanno votato per lavorare insieme nell'ambito della Fondazione Node.js[7].

A settembre 2015 Node.js v0.12 e io.js v3.3 sono stati fusi in Node v4.0[8]. Questa unione ha portato le funzionalità di V8 ES6 in Node.js e un ciclo di rilascio del supporto a lungo termine[9]. A partire dal 2016 il sito web io.js consiglia agli sviluppatori di tornare a Node.js e che non sono previste ulteriori versioni di io.js a causa della fusione[10].

Nel 2019 la JS Foundation e la Node.js Foundation si sono fuse per formare la OpenJS Foundation.

Efficienza modifica

Il modello di networking su cui si basa Node.js non è quello dei processi concorrenti, ma I/O event-driven: ciò vuol dire che Node richiede al sistema operativo di ricevere notifiche al verificarsi di determinati eventi, e rimane quindi in modalità sleep fino alla notifica stessa: solo in tale momento torna attivo per eseguire le istruzioni previste nella funzione di callback, così chiamata perché da eseguire una volta ricevuta la notifica che il risultato dell'elaborazione del sistema operativo è disponibile. Tale modello di networking, implementato anche nella libreria Event machine per Ruby e nel framework Twisted per Python, è ritenuto più efficiente nelle situazioni critiche in cui si verifica un elevato traffico di rete[11][12].

Governance del progetto modifica

Nel 2015 vari rami della più ampia comunità di Node.js hanno iniziato a lavorare sotto la Node.js Foundation indipendente dai fornitori. Lo scopo dichiarato dell'organizzazione è[13]

«consentire l'adozione diffusa e aiutare ad accelerare lo sviluppo di Node.js e altri moduli correlati attraverso un modello di governance aperto che incoraggia la partecipazione, il contributo tecnico e un quadro per la gestione a lungo termine da parte di un ecosistema investito in Node.js.»

Il Comitato tecnico direttivo della Fondazione Node.js (TSC) è l'organo di governo tecnico della Fondazione Node.js. Il TSC è responsabile del repository principale Node.js, nonché dei progetti dipendenti e adiacenti. Generalmente il TSC delega l'amministrazione di questi progetti a gruppi di lavoro o comitati[14]. Il gruppo LTS che gestisce le versioni supportate a lungo termine è uno di questi gruppi. Altri gruppi attuali includono Addon API, Benchmarking, Documentazione e Testing[15].

Nell'agosto 2017 un terzo dei membri del TSC si è dimesso a causa di una controversia relativa al codice di condotta del progetto[16].

Versioni modifica

Versione Status Nome Data di rilascio Inizio attivazione LTS Inizio della manutenzione Fine della manutenzione
Vecchia versione non più supportata: v0.10.x Vecchia versione non più supportata: Fine vita 2013-03-11 - 2015-10-01 2016-10-31
Vecchia versione non più supportata: v0.12.x Vecchia versione non più supportata: Fine vita 2015-02-06 - 2016-04-01 2016-12-31
Vecchia versione non più supportata: 4.x Vecchia versione non più supportata: Fine vita Argon[17] 2015-09-08 2015-10-01 2017-04-01 2018-04-30
Vecchia versione non più supportata: 5.x Vecchia versione non più supportata: Fine vita 2015-10-29 ? 2016-06-30
Vecchia versione non più supportata: 6.x Vecchia versione non più supportata: Fine vita Boron[17] 2016-04-26 2016-10-18 2018-04-30 2019-04-30
Vecchia versione non più supportata: 7.x Vecchia versione non più supportata: Fine vita 2016-10-25 ? 2017-06-30
Vecchia versione non più supportata: 8.x Vecchia versione non più supportata: Fine vita Carbon[17] 2017-05-30 2017-10-31 2019-01-01[18] 2019-12-31
Vecchia versione non più supportata: 9.x Vecchia versione non più supportata: Fine vita 2017-10-01 ? 2018-06-30
Vecchia versione non più supportata: 10.x Vecchia versione non più supportata: Fine vita Dubnium[17] 2018-04-24 2018-10-30 2020-05-19 2021-04-30
Vecchia versione non più supportata: 11.x Vecchia versione non più supportata: Fine vita 2018-10-23 ? 2019-06-01
Vecchia versione non più supportata: 12.x Vecchia versione non più supportata: Fine vita Erbium[17] 2019-04-23 2019-10-21 2020-11-30 2022-04-30
Vecchia versione non più supportata: 13.x Vecchia versione non più supportata: Fine vita 2019-10-22 - 2020-06-01
Vecchia versione non più supportata: 14.x Vecchia versione non più supportata: Fine vita Fermium[17] 2020-04-21 2020-10-27 2021-10-19 2023-04-30
Vecchia versione non più supportata: 15.x Vecchia versione non più supportata: Fine vita 2020-10-20 - 2021-06-01
Vecchia versione non più supportata: 16.x Vecchia versione non più supportata: Fine vita Gallium[17] 2021-04-20 2021-10-26 2022-10-18 2024-04-30
Vecchia versione non più supportata: 17.x Vecchia versione non più supportata: Fine vita 2021-10-19 - 2022-06-01
Versione precedente ancora supportata: 18.x Versione precedente ancora supportata: Manutenzione LTS Hydrogen[17] 2022-04-19 2022-10-25 2023-10-18 2025-04-30
Vecchia versione non più supportata: 19.x Vecchia versione non più supportata: Fine vita 2022-10-18 - 2023-04-01 2023-06-01
Versione precedente ancora supportata: 20.x Versione precedente ancora supportata: LTS Iron [17] 2023-04-18 2023-10-24 2024-10-22 2026-04-30
Versione stabile corrente: 21.x Versione stabile corrente: Corrente 2023-10-17 - 2024-04-01 2024-06-01
Versione futura: 22.x Versione futura: Futura 2024-04-23 2024-10-29 2025-10-21 2027-04-30
Versione futura: 23.x Versione futura: Futura 2024-10-15 - 2025-04-01 2025-06-01
Versione futura: 24.x Versione futura: Futura 2025-04-22 2025-10-28 2026-10-20 2028-04-30
Legenda:
Vecchia versione
Versione precedente ancora supportata
Versione corrente
Ultima versione di anteprima
Versione futura

Note modifica

  1. ^ Porting Node to Windows With Microsoft's Help, su nodejs.org. URL consultato il 17 aprile 2016.
  2. ^ Ryan Dahl, New gatekeeper, su groups.google.com. URL consultato il 26 ottobre 2013.
  3. ^ Isaac Schlueter, The Next Phase of Node.js, su nodejs.org, 15 gennaio 2014. URL consultato il 21 gennaio 2014.
  4. ^ Krill, Paul, Why io.js Decided to Fork Node.js, su javaworld.com, JavaWorld, 4 dicembre 2014. URL consultato il 15 dicembre 2014 (archiviato dall'url originale il 30 giugno 2017).
  5. ^ Ben Noordhuis, Issue 3692: function suddenly becomes undefined, su code.google.com, V8 JavaScript Engine Issues, 12 novembre 2014. URL consultato il 2 febbraio 2015.
  6. ^ Mikeal, Rogers, State of io.js, su medium.com, 28 gennaio 2015. URL consultato il 2 febbraio 2015.
  7. ^ Node.js Foundation Advances Community Collaboration, Announces New Members and Ratified Technical Governance, su linuxfoundation.org. URL consultato il 4 luglio 2015 (archiviato dall'url originale il 24 giugno 2015).
  8. ^ Node.js Foundation Combines Node.js and io.js Into Single Codebase in New Release, su nodejs.org. URL consultato il 28 gennaio 2016.
  9. ^ io.js and Node.js merge, su medium.com. URL consultato il 27 giugno 2015.
  10. ^ Io.js, JavaScript I/O, "io.js has merged with the Node.js project again. There won't be any further io.js releases. All of the features in io.js are available in Node.js v4 and above."
  11. ^ Articolo in inglese sulla gestione server tramite framework I/O
  12. ^ Scalable Network Programming, e-book di Felix von Leitner (in inglese, formato PDF).
  13. ^ (EN) Node.js Foundation, Node.js Foundation | Node.js, su nodejs.org. URL consultato l'8 marzo 2017.
  14. ^ (EN) nodejs/TSC, su GitHub. URL consultato l'8 marzo 2017.
  15. ^ (EN) Node.js Foundation, Working Groups | Node.js, su nodejs.org. URL consultato l'8 marzo 2017 (archiviato dall'url originale il 27 febbraio 2017).
  16. ^ Whittaker, Zack, After governance breakdown, Node.js leaders fight for its survival, ZDNet, 25 August 2017
  17. ^ a b c d e f g h i (EN) Node.js Release Working Group [Gruppo di lavoro rilasci Node.js], su GitHub. URL consultato il 12 dicembre 2023.
  18. ^ Node 8 reschedule, su github.com. URL consultato il 22 gennaio 2019.

Altri progetti modifica

Collegamenti esterni modifica

Controllo di autoritàLCCN (ENn2013024269 · GND (DE1027030742 · J9U (ENHE987007381984505171