Rilascio della piattaforma JavaScript server Node.js 14.0

Si è tenuto il rilascio Node.js 14.0, 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à fornito 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 miglioramenti:

  • È stata stabilizzata la capacità di generare on-the-fly o a seguito di determinati eventi report diagnostici, 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 Async Local Storage 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 moduli ECMAScript 6 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 8.1 (1, 2, 3), 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 WASI (WebAssembly System Interface), 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 versioni minime compilatori e piattaforme: macOS 10.13 (High Sierra), GCC 6, Windows oltre 7/2008R2.

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 collezione di moduli, 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 libuv, che è una sovrastruttura su libev nei sistemi Unix e su IOCP in Windows. Per creare un pool di thread viene utilizzata la libreria libeio, per eseguire query DNS in modalità non bloccante è integrato c-ares. 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 V8 (in aggiunta Microsoft sviluppa una variante di Node.js con il motore Chakra-Core).

Node.js è essenzialmente simile a framework quali Perl AnyEvent, Ruby Event Machine, Python Twisted e implementazione 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

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster