ha avuto luogo rilasciare Nodo.js 14.0,piattaforme per l'esecuzione di applicazioni di rete in JavaScript. Node.js 14.0 è un ramo di supporto a lungo termine, ma questo stato verrà assegnato solo a ottobre, dopo la stabilizzazione. Sarà supportato Node.js 14.0 essere effettuato fino ad aprile 2023. La manutenzione del precedente ramo LTS di Node.js 12.0 durerà fino ad aprile 2022 e l'anno precedente all'ultimo ramo LTS 10.0 fino ad aprile 2021. Il supporto per il ramo di staging 13.x terminerà a giugno di quest'anno.
È stata stabilizzata la capacità di generare al volo o al verificarsi di determinati eventi rapporti diagnostici, che visualizzano eventi che aiutano a diagnosticare problemi come arresti anomali, degrado delle prestazioni, perdite di memoria, carico pesante della CPU, output di errori imprevisti, ecc.
Aggiunto il supporto API sperimentale Archiviazione locale asincrona con l'implementazione della classe AsyncLocalStorage, che può essere utilizzata per creare stati asincroni con gestori basati su chiamate e promesse di callback. AsyncLocalStorage consente di archiviare dati durante l'elaborazione di una richiesta Web, ricordando l'archiviazione thread-local in altre lingue.
Rimosso il messaggio di avviso sulla funzionalità sperimentale durante il caricamento moduliECMAScript 6 collegati ed esportati utilizzando le istruzioni di importazione ed esportazione. Allo stesso tempo, l’implementazione stessa dei moduli ESM rimane sperimentale.
Motore V8 aggiornato alla versione 8.1 (1, 2, 3), che include nuove ottimizzazioni delle prestazioni e funzionalità come il nuovo operatore di concatenazione logica "??" (restituisce l'operando di destra se l'operando di sinistra è NULL o non definito e viceversa), l'operatore "?." per un controllo una tantum 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 delle Streams API, volta a migliorare la consistenza delle Streams API ed eliminare le differenze nel comportamento delle parti base di Node.js. Ad esempio, il comportamento di http.OutgoingMessage è simile a stream.Writable e net.Socket è simile a stream.Duplex. L'opzione autoDestroy è impostata su "true" per impostazione predefinita, il che significa chiamare "_destroy" al termine.
Aggiunto il supporto API sperimentale ERO IO (Interfaccia di sistema WebAssembly), fornendo interfacce software per l'interazione diretta con il sistema operativo (API POSIX per lavorare con file, socket, ecc.).
Ricordiamo che la piattaforma Node.js può essere utilizzata sia per il supporto server di applicazioni Web sia per la creazione di normali programmi di rete client e server. Per espandere la funzionalità delle applicazioni per Node.js, un gran numero di raccolta di moduli, in cui puoi trovare moduli con 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 a DBMS (MySQL, PostgreSQL, SQLite , MongoDB ), template engine, motori CSS, implementazioni di algoritmi crittografici e sistemi di autorizzazione (OAuth), parser XML.
Per gestire un gran numero di richieste parallele, Node.js utilizza un modello di esecuzione del codice asincrono basato sull'elaborazione di eventi non bloccanti e sulla definizione di gestori di callback. I metodi supportati per le connessioni multiplex includono epoll, kqueue, /dev/poll e select. La libreria viene utilizzata per connessioni multiplex libuv, che è una sovrastruttura sopra libevo su sistemi Unix e su IOCP su Windows. Una libreria viene utilizzata per creare un pool di thread libeio, per eseguire query DNS in modalità non bloccante è integrato c-ares. Tutte le chiamate di sistema che causano il blocco vengono eseguite all'interno del pool di thread e quindi, come i gestori di segnali, restituiscono il risultato del loro lavoro attraverso una pipe senza nome. L'esecuzione del codice JavaScript è assicurata attraverso l'utilizzo di un motore sviluppato da Google V8 (Inoltre, Microsoft sta sviluppando una versione di Node.js con il motore Chakra-Core).
Fondamentalmente, Node.js è simile ai framework Perl Qualsiasi Evento, Macchina degli eventi Ruby, Pitone Contorto и implementazione eventi in Tcl, ma il loop degli eventi in Node.js è nascosto allo sviluppatore e assomiglia alla gestione degli eventi in un'applicazione Web in esecuzione in un browser. Quando si scrivono applicazioni per node.js, è necessario tenere conto delle specificità della programmazione basata sugli eventi, ad esempio, invece di fare "var result = db.query("select..");" con l'attesa del completamento del lavoro e la successiva elaborazione dei risultati, Node.js utilizza il principio dell'esecuzione asincrona, ovvero il codice viene trasformato in "db.query("select..", funzione (risultato) {elaborazione risultato});", in cui il controllo passerà immediatamente a ulteriore codice e il risultato della query verrà elaborato all'arrivo dei dati. .