il rilascio , piattaforme per l'esecuzione di applicazioni di rete in JavaScript. Node.js 14.0 appartiene ai rami con supporto a lungo termine, ma questo stato sarà assegnato solo a ottobre, dopo un periodo di stabilizzazione. Il supporto per Node.js 14.0 sarà fino ad aprile 2023. Il supporto della precedente versione LTS Node.js 12.0 continuerà fino ad aprile 2022, mentre quello della versione LTS 10.0 terminerà ad aprile 2021. Il supporto per il ramo intermedio 13.x si concluderà a giugno di quest'anno.
Principali :
- È stata stabilizzata la capacità di generare on-the-fly o a seguito di determinati eventi , nei quali vengono riflessi eventi utili per diagnosticare problemi come crash, cali di prestazioni, perdite di memoria, elevato carico della CPU, output imprevisti di errori e altro.
- È stata aggiunta la supporto sperimentale per l'API con l'implementazione della classe AsyncLocalStorage, che può essere utilizzata per creare uno stato asincrono con gestori basati su callback e promise. AsyncLocalStorage consente di memorizzare dati durante l'elaborazione delle richieste web, simile agli archivi locali per singoli thread (Thread-Local Storage) in altri linguaggi.
- È stata rimossa la notifica di avviso sulla funzionalità sperimentale durante il caricamento di moduli importati ed esportati mediante le espressioni import ed export. Tuttavia, l'implementazione dei moduli ESM rimane al momento sperimentale.
- Il motore V8 è stato aggiornato alla versione (, , ), in cui sono state apportate nuove ottimizzazioni delle prestazioni e aggiunti sviluppi come il nuovo operatore logico di fusione «??» (restituisce l'operando destro se l'operando sinistro è NULL o undefined, e viceversa), l'operatore «?.» per la verifica contemporanea dell'intera catena di proprietà o chiamate (ad esempio «db?.user?.name?.length» senza controlli preliminari), il metodo Intl.DisplayName per ottenere nomi localizzati e altro.
- È stata effettuata una revisione dell'API Streams, mirata a migliorare la coerenza delle interfacce API Streams e ad eliminare le differenze nel comportamento delle parti fondamentali di Node.js. Ad esempio, il comportamento di http.OutgoingMessage è stato avvicinato a stream.Writable, mentre net.Socket a stream.Duplex. L'opzione autoDestroy è impostata su «true» per impostazione predefinita, implicando la chiamata a «_destroy» al termine.
- È stata aggiunta la supporto sperimentale per l'API (), fornendo interfacce software per un'interazione diretta con il sistema operativo (API POSIX per lavorare con file, socket ecc.).
- Sono aumentate le esigenze riguardo a compilatori e piattaforme: macOS 10.13 (High Sierra), GCC 6, .
Ricordiamo che la piattaforma Node.js può essere utilizzata sia per il supporto server delle web application, sia per la creazione di normali programmi di rete client e server. È stata preparata una grande , in cui è possibile trovare moduli con l'implementazione di server e client HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli per l'integrazione con vari web framework, gestori WebSocket e Ajax, connettori per DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motori di templating, motori CSS, implementazioni di algoritmi crittografici e sistemi di autorizzazione (OAuth), parser XML.
Per gestire un elevato numero di richieste parallele, Node.js utilizza un modello di esecuzione asincrono basato su un trattamento eventi in modalità non bloccante e definizione di callback. Come metodi di multiplexing delle connessioni, supporta tecniche come epoll, kqueue, /dev/poll e select. Per il multiplexing delle connessioni viene utilizzata la libreria , che è una sovrastruttura su nei sistemi Unix e su IOCP in Windows. Per creare un pool di thread viene utilizzata la libreria , per eseguire query DNS in modalità non bloccante è integrato . Tutti i syscall che causano blocchi vengono eseguiti all'interno del pool di thread e poi, come anche i gestori dei segnali, restituiscono il risultato del loro lavoro tramite un canale anonimo (pipe). L'esecuzione del codice JavaScript è garantita attraverso l'utilizzo del motore sviluppato da Google (in aggiunta Microsoft sviluppa una variante di Node.js con il motore Chakra-Core).
Node.js è essenzialmente simile a framework quali , , e di eventi in Tcl, ma il ciclo di elaborazione degli eventi (event loop) in Node.js è nascosto agli sviluppatori e ricorda il trattamento degli eventi in un'app web che opera nel browser. Quando si scrivono applicazioni per Node.js è importante considerare le specificità della programmazione orientata agli eventi; per esempio, invece di eseguire «var result = db.query(«select..»);» in attesa del completamento e successivo trattamento dei risultati, in Node.js si utilizza il principio dell'esecuzione asincrona, cioè il codice viene trasformato in «db.query(«select..», function (result) {trattamento del risultato});», nel quale il controllo passerà immediatamente al codice successivo, mentre il risultato della query sarà trattato man mano che i dati arrivano.
Fonte: opennet.ru
