È stata rilasciata la versione 16.0 di Node.js, la piattaforma per l'esecuzione di applicazioni di rete in JavaScript. Node.js 16.0 è stato assegnato ai rami a lungo termine di supporto, ma questo stato sarà conferito solo in ottobre, dopo la fase di stabilizzazione. Il supporto per Node.js 16.0 sarà garantito fino ad aprile 2023. Il supporto per l'ultima versione LTS di Node.js 14.0 proseguirà fino ad aprile 2023, mentre per la precedente versione LTS 12.0 fino ad aprile 2022. Il supporto per la versione LTS 10.0 sarà interrotto tra 10 giorni.
Principali miglioramenti:
- Il motore V8 è stato aggiornato alla versione 9.0 (nella versione 15 di Node.js era in uso la versione 8.6), permettendo a Node.js 16 di implementare funzionalità come la proprietà «indices» per le espressioni regolari (che include un array con le posizioni di inizio e fine dei gruppi di corrispondenza), il metodo Atomics.waitAsync (versione asincrona di Atomics.wait) e il supporto per l'uso della parola chiave await nei moduli a livello superiore. È stata accelerata la chiamata delle funzioni, quando il numero di argomenti forniti non corrisponde a quello definito nei parametri della funzione.
- È stato stabilizzato l'API Timers Promises, che fornisce un insieme alternativo di funzioni per lavorare con i timer, restituendo oggetti Promise, consentendo di evitare l'uso di util.promisify(). import { setTimeout } from ‘timers/promises’; async function run() { await setTimeout(5000); console.log(‘Hello, World!’); } run();
- È stata aggiunta un'implementazione sperimentale dell'API Web Crypto, destinata all'esecuzione di operazioni crittografiche di base sul lato delle applicazioni web, come la manipolazione di hash crittografici, la generazione e la verifica di firme digitali, la codifica e la decodifica dei dati utilizzando vari metodi di crittografia, e la generazione di numeri casuali crittograficamente sicuri. L'API prevede anche funzioni per la generazione di chiavi e la loro gestione.
- L'N-API (API per lo sviluppo di estensioni) è stato aggiornato alla versione 8.
- È stata effettuata la transizione alla nuova versione del gestore pacchetti NPM 7.10.
- È stata stabilizzata l'implementazione della classe AbortController, basata sull'API Web AbortController e che consente di annullare i segnali negli API selezionati basati su Promise.
- È stato stabilizzato il supporto per la terza versione del formato Source Map, utilizzato per mappare moduli generati, elaborati o impacchettati con il codice sorgente originale.
- Sono stati aggiunti i metodi buffer.atob(data) e buffer.btoa(data) per la compatibilità con le API Web obsolete.
- È iniziata la formazione dei pacchetti per i nuovi dispositivi Apple dotati del chip ARM M1.
- Sulla piattaforma Linux, i requisiti per la versione del compilatore sono stati elevati a GCC 8.3.
Ricordiamo che la piattaforma Node.js può essere utilizzata sia per supportare il funzionamento di applicazioni web server, sia per creare normali programmi client e server. Per ampliare le funzionalità delle applicazioni Node.js è stata preparata una vasta collezione di moduli, in cui è possibile trovare moduli con implementazioni. 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.
Inoltre, è importante notare che l'azienda Deno, fondata dal creatore di Node.js per lo sviluppo della piattaforma di nuova generazione Deno, ha ricevuto un investimento di 4,9 milioni di dollari. Per la sua funzionalità, Deno ricorda Node.js, ma cerca di correggere gli errori concettuali presenti nell'architettura di Node.js e di fornire agli utenti un ambiente più sicuro. Si osserva che le soluzioni aziendali di Deno si baseranno su prodotti completamente open source, mentre il modello Open Core con la separazione delle funzionalità a pagamento è considerato inaccettabile per la piattaforma Deno.
Fonte: opennet.ru
