rilascio , piattaforma 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à conferito solo a ottobre, dopo un periodo di stabilizzazione. Il supporto per Node.js 14.0 sarà fino ad aprile 2023. Il supporto per il precedente ramo LTS Node.js 12.0 durerà fino ad aprile 2022, mentre per il ramo LTS precedente 10.0 fino ad aprile 2021. Il supporto per il ramo intermedio 13.x terminerà a giugno di quest'anno.
Principali :
- È stata stabilita la possibilità di generare dinamicamente o in seguito a determinati eventi , in cui vengono registrati eventi utili alla diagnosi di problemi come crash, cali di prestazioni, perdite di memoria, elevato carico sulla CPU, errori di output imprevisti, ecc.
- È stato aggiunto il 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 di una richiesta web, simile allo storage locale per thread separati (Thread-Local Storage) in altri linguaggi.
- È stata rimossa la visualizzazione dell'avviso sulla funzionalità sperimentale durante il caricamento di importazioni ed esportazioni tramite espressioni import e export. Tuttavia, l'implementazione stessa dei moduli ESM rimane ancora sperimentale.
- Il motore V8 è stato aggiornato alla versione (, , ), in cui sono state inserite nuove ottimizzazioni delle prestazioni e nuove funzionalità come il nuovo operatore logico di coalescenza «??» (ritorna l'operando destro se quello sinistro è NULL o undefined, e viceversa), l'operatore «?.» per il controllo simultaneo dell'intera catena di proprietà o chiamate (ad esempio «db?.user?.name?.length» senza controlli preliminari), il metodo Intl.DisplayName per ottenere nomi localizzati, ecc.
- È stata effettuata una revisione dell'API Streams, mirata a migliorare la coerenza delle interfacce API di 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, e net.Socket a stream.Duplex. L'opzione autoDestroy è stata impostata di default su «true», implicando la chiamata a «_destroy» al termine.
- È stato aggiunto il supporto sperimentale per l'API (), fornendo interfacce per l'interazione diretta con il sistema operativo (API POSIX per l'operazione con file, socket, ecc.).
- Sono stati aumentati i requisiti per di compilatori e piattaforme: macOS 10.13 (High Sierra), GCC 6, .
collezione di moduli , in cui è possibile trovare moduli per l'implementazione di server e client HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli per l'integrazione con vari framework web, gestori WebSocket e Ajax, connettori per database (MySQL, PostgreSQL, SQLite, MongoDB), motori di template, CSS, implementazioni di algoritmi crittografici e sistemi di autorizzazione (OAuth), parser XML.
Per garantire la gestione 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. Sono supportati metodi di multiplexing delle connessioni come epoll, kqueue, /dev/poll e select. Per il multiplexing delle connessioni viene utilizzata la libreria , che è un'estensione di nei sistemi Unix e di IOCP in Windows. Per creare un pool di thread viene utilizzata la libreria , per eseguire richieste DNS in modalità non bloccante è integrato . Tutti i sistemi di chiamata che causano blocchi vengono eseguiti all'interno di un pool di thread e, come i gestori di segnali, restituiscono il risultato del loro lavoro attraverso un canale anonimo (pipe). L'esecuzione del codice JavaScript è garantita dall'implementazione dell'engine sviluppato da Google. (in aggiunta, Microsoft sviluppa una variante di Node.js con l'engine Chakra-Core).
Essenzialmente, Node.js è simile ai framework , , e eventi in Tcl, ma il ciclo di elaborazione degli eventi (event loop) in Node.js è nascosto agli sviluppatori e ricorda la gestione degli eventi in un'app web che funziona nel browser. Quando si scrivono applicazioni per Node.js, è importante considerare le peculiarità della programmazione orientata agli eventi; ad esempio, invece di eseguire "var result = db.query('select..');" attendendo il completamento del lavoro e successivamente elaborando i risultati, in Node.js si utilizza il principio dell'esecuzione asincrona, cioè il codice viene trasformato in "db.query('select..', function (result) {elaborazione del risultato});", in cui il controllo passa immediatamente al codice successivo e il risultato della query verrà elaborato man mano che i dati arrivano.
Fonte: opennet.ru
