È stata rilasciata la Node.js 19.0, la piattaforma per l'esecuzione di applicazioni di rete in JavaScript. La Node.js 19 è classificata come una versione di supporto normale, con aggiornamenti previsti fino a giugno 2023. Nei prossimi giorni si concluderà la stabilizzazione della versione Node.js 18, che otterrà lo status di LTS e sarà supportata fino ad aprile 2025. Il supporto per la precedente versione LTS Node.js 16.0 terminerà a settembre 2023, mentre per l'antecedente versione LTS 14.0 scadrà ad aprile 2023.
Principali miglioramenti:
- Il motore V8 è stato aggiornato alla versione 10.7, utilizzata in Chromium 107. Tra i cambiamenti rispetto alla versione Node.js 18, si segnala l'implementazione della terza versione dell'API Intl.NumberFormat, in cui sono state aggiunte nuove funzioni come formatRange(), formatRangeToParts() e selectRange(), la raggruppamento di insiemi, nuove opzioni di arrotondamento e definizione della precisione, nonché la possibilità di interpretare le stringhe come numeri decimali. Sono stati aggiornati anche le dipendenze llhttp 8.1.0 e npm 8.19.2.
- È stata proposta una nuova opzione sperimentale «node —watch», che implementa una modalità di sorveglianza, consentendo il riavvio del processo in caso di modifica del file importato (ad esempio, eseguendo «node —watch index.js», il processo verrà automaticamente riavviato al cambiamento di index.js).
- Per tutte le connessioni HTTP/HTTPS in uscita è stata attivata la supporto per il meccanismo HTTP 1.1 Keep-Alive, mantenendo la connessione aperta per un certo periodo per gestire più richieste HTTP su una singola connessione. Si prevede che l'uso di Keep-Alive aumenti la larghezza di banda e le prestazioni. Per impostazione predefinita, il timeout per mantenere la connessione aperta è fissato a 5 secondi. È stata aggiunta nel client HTTP la supporto per l'analisi dell'intestazione HTTP Keep-Alive nelle risposte. server, e nel server HTTP di Node.js è stata aggiunta la disconnessione automatica dei client inattivi che utilizzano Keep-Alive.
- L'API WebCrypto è stata elevata a stabilità, ad eccezione delle funzioni che utilizzano gli algoritmi Ed25519, Ed448, X25519 e X448. Per accedere al modulo WebCrypto ora è possibile utilizzare globalThis.crypto oppure require(‘node:crypto’).webcrypto.
- È stato rimosso il supporto per gli strumenti di tracciamento DTrace, SystemTap e ETW (Event Tracing for Windows), poiché il loro mantenimento è stato considerato poco pratico a causa della complessità di supportarli in modo adeguato senza un piano di supporto adeguato.
La piattaforma Node.js può essere utilizzata sia per il supporto server lato Web di applicazioni che per creare normali programmi client e server di rete. Per espandere la funzionalità delle applicazioni Node.js è stata preparata una vasta collezione di moduli, in cui si possono trovare moduli con implementazione server e client HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli per integrazioni con diversi framework web, gestori WebSocket e Ajax, connettori a DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motori di templating, motori CSS, implementazioni di algoritmi crittografici e sistemi di autorizzazione (OAuth), parser XML.
Per garantire l'elaborazione di un gran numero di richieste parallele, Node.js utilizza un modello di esecuzione del codice asincrono, basato sulla gestione degli eventi in modalità non bloccante e sulla definizione di gestori di callback. Come metodi di multiplexing delle connessioni, sono supportati metodi come epoll, kqueue, \/dev\/poll e select. Per il multiplexing delle connessioni viene utilizzata la libreria libuv, che è un'astrazione sopra libev nei sistemi Unix e sopra IOCP in Windows. Per creare un pool di thread viene utilizzata la libreria libeio, mentre per eseguire richieste DNS in modalità non bloccante è integrato c-ares. Tutti le chiamate di sistema che causano bloccaggi vengono eseguite all'interno del pool di thread e quindi, come i gestori di segnali, trasmettono il risultato del loro lavoro indietro attraverso un canale non nominato (pipe). L'esecuzione del codice JavaScript è garantita dall'utilizzo del motore V8 sviluppato da Google (in aggiunta Microsoft sviluppa una variante di Node.js con il motore Chakra-Core).
Fondamentalmente, Node.js è simile ai framework Perl AnyEvent, Ruby Event Machine, Python Twisted e all'implementazione degli eventi in Tcl, ma il ciclo di gestione degli eventi (event loop) in Node.js è nascosto agli sviluppatori e ricorda la gestione degli eventi in un'applicazione web che opera nel browser. Quando si scrivono applicazioni per Node.js, è necessario considerare le specificità della programmazione orientata agli eventi; ad esempio, invece di eseguire "var result = db.query('select...');" attendendo il completamento e la successiva elaborazione dei risultati, Node.js utilizza il principio dell'esecuzione asincrona, ossia il codice si trasforma in "db.query('select...', function (result) {elaborazione del risultato});", dove il controllo passa immediatamente al codice successivo e il risultato della query viene elaborato man mano che i dati diventano disponibili.
Fonte: opennet.ru
