Node.js: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
 
(64 versioni intermedie di 41 utenti non mostrate)
Riga 1:
{{Software
{{S|software}}
|Logo =
*
|Sviluppatore = [[Joyent]]
|UltimaVersione =
|DataUltimaVersione =
|UltimaVersioneBeta =
|SistemaOperativo = cross-platform
|Genere = [[Programmazione (informatica)|Programmazione]]
}}
 
'''Node.js''' è un [[runtime system]] [[open source]] multipiattaforma [[Programmazione a eventi|orientato agli eventi]] per l'esecuzione di codice [[JavaScript]], costruito sul [[V8 (motore JavaScript)|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.
{{Controllo di autorità}}
{{portale|informatica|software libero}}
 
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).
[[Categoria:Librerie JavaScript]]
 
Node.js ha un'architettura [[Programmazione a eventi|orientata agli eventi]] che rende possibile l'[[Input/Output|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 (azienda)|SAP]], [[Voxer]], [[Walmart]] e [[Yahoo!]].
 
== Storia ==
[[File:Ryan Dahl.jpg|alt=Ryan Dahl|miniatura|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<ref>{{Cita web|url=https://nodejs.org/en/blog/uncategorized/porting-node-to-windows-with-microsofts-help/|titolo=Porting Node to Windows With Microsoft's Help|accesso=17 aprile 2016}}</ref>. 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 (software)|npm]]'' Isaac Schlueter a gestire il progetto<ref>{{Cita web|url=https://groups.google.com/g/nodejs/c/hfajgpvGTLY|titolo=New gatekeeper|cognome=Dahl|nome=Ryan}}</ref>. Nel gennaio 2014 Schlueter ha annunciato che Timothy J. Fontaine avrebbe guidato il progetto<ref>{{Cita web|url=https://nodejs.org/en/blog/uncategorized/tj-fontaine-new-node-lead/|titolo=The Next Phase of Node.js|cognome=Schlueter|nome=Isaac|data=15 gennaio 2014|accesso=21 gennaio 2014}}</ref>.
 
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<ref name="Krill, Paul">{{Cita web|url=http://www.javaworld.com/article/2855639/open-source-tools/qanda-why-io-js-decided-to-fork-node-js.html|titolo=Why io.js Decided to Fork Node.js|editore=JavaWorld|data=4 dicembre 2014|accesso=15 dicembre 2014|autore=Krill, Paul|urlarchivio=https://web.archive.org/web/20170630072910/http://www.javaworld.com/article/2855639/open-source-tools/qanda-why-io-js-decided-to-fork-node-js.html|urlmorto=sì}}</ref>. A differenza di Node.js<ref>{{Cita web|url=https://code.google.com/p/v8/issues/detail?id=3692#c3|titolo=Issue 3692: function suddenly becomes undefined|editore=V8 JavaScript Engine Issues|autore=Ben Noordhuis|data=12 novembre 2014|accesso=2 febbraio 2015}}</ref> gli autori hanno pianificato di mantenere io.js aggiornato con le ultime versioni del motore JavaScript V8 di Google<ref name="Mikeal, Rogers">{{Cita web|url=https://medium.com/node-js-javascript/state-of-io-js-2b3094e6f923|titolo=State of io.js|data=28 gennaio 2015|accesso=2 febbraio 2015|autore=Mikeal, Rogers}}</ref>.
 
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<ref>{{Cita web|url=https://www.linuxfoundation.org/news-media/announcements/2015/06/nodejs-foundation-advances-community-collaboration-announces-new|titolo=Node.js Foundation Advances Community Collaboration, Announces New Members and Ratified Technical Governance|accesso=4 luglio 2015|urlmorto=s|urlarchivio=https://web.archive.org/web/20150624075643/http://www.linuxfoundation.org/news-media/announcements/2015/06/nodejs-foundation-advances-community-collaboration-announces-new}}</ref>.
 
A settembre 2015 Node.js v0.12 e io.js v3.3 sono stati fusi in Node v4.0<ref>{{Cita web|url=https://nodejs.org/en/blog/announcements/foundation-v4-announce/|titolo=Node.js Foundation Combines Node.js and io.js Into Single Codebase in New Release|accesso=28 gennaio 2016}}</ref>. Questa unione ha portato le funzionalità di V8 ES6 in Node.js e un ciclo di rilascio del supporto a lungo termine<ref>{{Cita web|url=https://medium.com/node-js-javascript/io-js-week-of-may-15th-9ada45bd8a28|titolo=io.js and Node.js merge|accesso=27 giugno 2015}}</ref>. 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<ref>[https://iojs.org/en/ 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."''</ref>.
 
Nel 2019 la JS Foundation e la Node.js Foundation si sono fuse per formare la OpenJS Foundation.
 
== Efficienza ==
Il modello di networking su cui si basa Node.js non è quello dei processi concorrenti, ma [[Input/output|I/O]] [[Programmazione a eventi|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 (linguaggio di programmazione)|Ruby]] e nel framework ''Twisted'' per [[Python]], è ritenuto più efficiente nelle situazioni critiche in cui si verifica un elevato traffico di rete<ref>[http://www.kegel.com/c10k.html Articolo in inglese sulla gestione server tramite framework I/O]</ref><ref>[http://bulk.fefe.de/scalable-networking.pdf Scalable Network Programming, e-book di Felix von Leitner (in inglese, formato PDF).]</ref>.
 
== Governance del progetto ==
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 è<ref>{{Cita web|url=https://nodejs.org/en/foundation/|titolo=Node.js Foundation {{!}} Node.js|cognome=Foundation|nome=Node.js|sito=nodejs.org|lingua=en|accesso=8 marzo 2017}}</ref> {{citazione|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<ref>{{Cita web|url=https://github.com/nodejs/TSC|titolo=nodejs/TSC|sito=GitHub|lingua=en|accesso=8 marzo 2017}}</ref>. Il gruppo LTS che gestisce le versioni supportate a lungo termine è uno di questi gruppi. Altri gruppi attuali includono Addon API, [[Benchmark (informatica)|Benchmarking]], Documentazione e Testing<ref>{{Cita web|url=https://nodejs.org/en/about/working-groups/|titolo=Working Groups {{!}} Node.js|cognome=Foundation|nome=Node.js|sito=nodejs.org|lingua=en|accesso=8 marzo 2017|urlarchivio=https://web.archive.org/web/20170227070535/https://nodejs.org/en/about/working-groups/|urlmorto=sì}}</ref>.
 
Nell'agosto 2017 un terzo dei membri del TSC si è dimesso a causa di una controversia relativa al codice di condotta del progetto<ref>Whittaker, Zack, ''[http://www.zdnet.com/article/after-governance-breakdown-node-js-leaders-fight-for-its-survival/?loc=newsletter_large_thumb_related&ftag=TREc64629f&bhid=24465828771686428160302951310435/ After governance breakdown, Node.js leaders fight for its survival]'', ZDNet, 25 August 2017</ref>.
 
{| class="wikitable"
|+ Membri del TSC<ref>{{Cita web|url=https://github.com/nodejs/node?tab=readme-ov-file#tsc-voting-members|titolo=tsc-voting-members|sito=Github.com|data=16 maggio 2024 }}</ref>
! Username !! Nome Completo
|-
| aduh95 || Antoine du Hamel
|-
| anonrig || Yagiz Nizipli
|-
| benjamingr || Benjamin Gruenbaum
|-
| BridgeAR || Ruben Bridgewater
|-
| gireeshpunathil || Gireesh Punathil
|-
| jasnell || James M Snell
|-
| joyeecheung || Joyee Cheung
|-
| legendecas || Chengzhong Wu
|-
| marco-ippolito || Marco Ippolito
|-
| mcollina || Matteo Collina
|-
| mhdawson || Michael Dawson
|-
| RafaelGSS || Rafael Gonzaga
|-
| richardlau || Richard Lau
|-
| ronag || Robert Nagy
|-
| ruyadorno || Ruy Adorno
|-
| ShogunPanda || Paolo Insogna
|-
| targos || Michaël Zasso
|-
| tniessen || Tobias Nießen
|}
 
== Versioni ==
{| class="wikitable" style="text-align: center; padding: 2em;"
!Versione
!Status
!Nome
!Data di rilascio
!Inizio attivazione LTS
!Inizio della manutenzione
!Fine della manutenzione
|-
| {{Version|o|v0.10.x}}
| {{Version|o|Fine vita}}
|
| 2013-03-11
| -
| 2015-10-01
| 2016-10-31
|-
| {{Version|o|v0.12.x}}
| {{Version|o|Fine vita}}
|
| 2015-02-06
| -
| 2016-04-01
| 2016-12-31
|-
| {{Version|o|4.x}}
| {{Version|o|Fine vita}}
| Argon<ref name="Release">{{Cita web|url=https://github.com/nodejs/Release|titolo=Node.js Release Working Group|titolotradotto=Gruppo di lavoro rilasci Node.js|sito=GitHub|lingua=en|accesso=12 dicembre 2023}}</ref>
| 2015-09-08
| 2015-10-01
| 2017-04-01
| 2018-04-30
|-
| {{Version|o|5.x}}
| {{Version|o|Fine vita}}
|
| 2015-10-29
| colspan="2" |?
| 2016-06-30
|-
| {{Version|o|6.x}}
| {{Version|o|Fine vita}}
| Boron<ref name="Release" />
| 2016-04-26
| 2016-10-18
| 2018-04-30
| 2019-04-30
|-
| {{Version|o|7.x}}
| {{Version|o|Fine vita}}
|
| 2016-10-25
| colspan="2" |?
| 2017-06-30
|-
| {{Version|o|8.x}}
| {{Version|o|Fine vita}}
| Carbon<ref name="Release" />
| 2017-05-30
| 2017-10-31
| 2019-01-01<ref>{{Cita web|url=https://github.com/nodejs/Release/pull/391/files |accesso= 22 gennaio 2019|titolo=Node 8 reschedule}}</ref>
| 2019-12-31
|-
| {{Version|o|9.x}}
| {{Version|o|Fine vita}}
|
| 2017-10-01
| colspan="2" |?
| 2018-06-30
|-
| {{Version|o|10.x}}
| {{Version|o|Fine vita}}
| Dubnium<ref name="Release" />
| 2018-04-24
| 2018-10-30
| 2020-05-19
| 2021-04-30
|-
| {{Version|o|11.x}}
| {{Version|o|Fine vita}}
|
| 2018-10-23
| colspan="2" |?
| 2019-06-01
|-
| {{Version|o|12.x}}
| {{Version|o|Fine vita}}
| Erbium<ref name="Release" />
| 2019-04-23
| 2019-10-21
| 2020-11-30
| 2022-04-30
|-
| {{Version|o|13.x}}
| {{Version|o|Fine vita}}
|
| 2019-10-22
| -
|
| 2020-06-01
|-
| {{Version|o|14.x}}
| {{Version|o|Fine vita}}
| Fermium<ref name="Release" />
| 2020-04-21
| 2020-10-27
| 2021-10-19
| 2023-04-30
|-
| {{Version|o|15.x}}
| {{Version|o|Fine vita}}
|
| 2020-10-20
| -
|
| 2021-06-01
|-
| {{Version|o|16.x}}
| {{Version|o|Fine vita}}
| Gallium<ref name="Release" />
| 2021-04-20
| 2021-10-26
| 2022-10-18
| 2024-04-30
|-
| {{Version|o|17.x|show=}}
| {{Version|o|Fine vita|show=}}
|
| 2021-10-19
| -
|
| 2022-06-01
|-
| {{Version|co|18.x}}
| {{Version|co|Manutenzione LTS}}
| Hydrogen<ref name="Release" />
| 2022-04-19
| 2022-10-25
| 2023-10-18
| 2025-04-30
|-
| {{Version|o|19.x}}
| {{Version|o|Fine vita}}
|
| 2022-10-18
| -
| 2023-04-01
| 2023-06-01
|-
| {{Version|co|20.x}}
| {{Version|co|LTS}}
| Iron <ref name="Release" />
| 2023-04-18
| 2023-10-24
| 2024-10-22
| 2026-04-30
|-
| {{Version|co|21.x}}
| {{Version|co|Manutenzione}}
|
| 2023-10-17
| -
| 2024-04-01
| 2024-06-01
|-
| {{Version|c|22.x}}
| {{Version|c|Corrente}}
| Jod <ref name="Release" />
| 2024-04-23
| 2024-10-29
| 2025-10-21
| 2027-04-30
|-
| {{Version|p|23.x}}
| {{Version|p|Futura}}
|
| 2024-10-15
| -
| 2025-04-01
| 2025-06-01
|-
| {{Version|p|24.x}}
| {{Version|p|Futura}}
| Krypton <ref name="Release" />
| 2025-04-22
| 2025-10-28
| 2026-10-20
| 2028-04-30
|-
| colspan="7" | <small>{{Version |l |show=111101}}
|}
 
== Note ==
<references />
 
== Altri progetti ==
{{interprogetto}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC}}
* [https://web.archive.org/web/20110410105248/http://howtonode.org/ HowToNode.org], community che raccoglie esempi di programmazione Node.JS
* {{cita web|url= https://github.com/mochajs/mocha|titolo= Mocha, framework per test asincroni su Node.js, con funzioni di reporting|sito= GitHub}}
 
{{Framework per applicazioni web}}
{{Controllo di autorità}}
{{portale|software libero}}