Piattaforma JavaScript Node.js 22.0.0 disponibile

È stato rilasciato Node.js 22.0, una piattaforma per eseguire applicazioni di rete in JavaScript. Node.js 22.0 è classificato come ramo di supporto a lungo termine, ma questo status verrà assegnato solo ad ottobre, dopo la stabilizzazione. Node.js 22.x sarà supportato fino al 30 aprile 2027. La manutenzione del precedente ramo LTS di Node.js 20.x durerà fino ad aprile 2026 e l'anno precedente all'ultimo ramo LTS 18.x fino ad aprile 2025. Il ramo di staging di Node.js 21.x verrà interrotto il 1° giugno 2024.

Principali miglioramenti:

  • Il motore V8 è stato aggiornato alla versione 12.4, utilizzata in Chromium 124. Tra le modifiche rispetto al ramo Node.js 21, che utilizzava il motore V8 11.8), si segnala:
    • Supporto per l'estensione WasmGC, che semplifica il porting su WebAssembly di programmi scritti in linguaggi di programmazione che utilizzano un garbage collector (Kotlin, PHP, Java, ecc.). WasmGC aggiunge nuovi tipi di strutture e array che possono utilizzare l'allocazione di memoria non lineare.
    • Supporto per il metodo Array.fromAsync(), che restituisce in modo asincrono una nuova istanza di un oggetto Array copiato da un oggetto simile ad un array, iterabile o iterabile asincrono.
    • Supporto per metodi iteratori come .map, .filter, .find, .take, .drop, .forEach e .reduce.
    • Supporto per un oggetto Set che definisce una raccolta di valori e offre metodi che implementano operazioni comuni sugli insiemi, come intersezione, unione, differenza e addizione.
  • Il compilatore JIT di ottimizzazione Maglev è abilitato per impostazione predefinita, mirato a generare rapidamente codice macchina ad alte prestazioni per codice JavaScript molto utilizzato. L'abilitazione di Maglev può velocizzare significativamente le applicazioni CLI di breve durata che non eseguono operazioni a lungo termine, ad esempio, il tempo per completare il test Jetstrea è ridotto del 7.5% e il test del tachimetro del 5%.
  • Il lavoro con i flussi è stato accelerato aumentando il valore dell'opzione highWaterMark da 16 KB a 65 KB (definisce il limite fino al quale la registrazione viene bufferizzata). La modifica comporta un maggiore consumo di memoria, quindi le applicazioni progettate per essere eseguite su RAM limitata potrebbero dover ripristinare il vecchio valore tramite una chiamata a setDefaultHighWaterMark().
  • Prestazioni migliorate delle API fetch() e test runner rendendo più efficiente l'istanziazione di AbortSignal. Le prestazioni delle API relative al lavoro sincrono con i file system sono state migliorate.
  • È stata fornita una funzionalità sperimentale per utilizzare la chiamata "require()" per caricare i moduli JavaScript ESM (moduli ECMAScript) in modalità sincrona. I moduli ESM vengono utilizzati nei browser e sostituiscono i moduli CommonJS specifici di Node.js. Per caricare tramite "require()", il modulo ESM deve essere eseguito in modalità sincrona (senza wait al livello superiore). Il supporto è abilitato tramite il flag "--experimental-require-module".
  • Aggiunta la possibilità sperimentale di eseguire script definiti nel file package.json utilizzando il comando "--run". "
  • Il comando “node –watch” è stato spostato nella categoria stabile con l'implementazione di una modalità watch che garantisce che il processo venga riavviato quando cambia il file importato (ad esempio, se viene eseguito “node –watch index.js”, il il processo verrà riavviato automaticamente quando cambia index.js).
  • L'implementazione nativa dell'API WebSocket è stata stabilizzata, consentendo di utilizzare WebSocket in modalità client senza installare dipendenze aggiuntive.
  • Aggiunto supporto parziale per l'API Navigator.
  • L'API Webstreams ha aggiunto il supporto per il formato di compressione deflate-raw.
  • Aggiunte le funzioni glob e globSync a node:fsmodule per la corrispondenza dei modelli dei percorsi dei file.
  • Gestione migliorata degli stack IPv6 configurati in modo errato. Implementato l'algoritmo Happy Eyeballs per un rapido rollback in caso di problemi con il funzionamento di IPv6.
  • L'API util è stata deprecata.
  • Versioni delle dipendenze aggiornate: npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson to 3.8.0, ada 2.7.7 e undici 6.6.0 .

La piattaforma Node.js può essere utilizzata sia per il supporto lato server di applicazioni web, sia per la creazione di programmi di rete standard lato client e lato server. Per espandere le funzionalità delle applicazioni Node.js, è stata predisposta un'ampia raccolta di moduli, inclusi quelli che implementano server e client HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli per l'integrazione con vari framework web, gestori WebSocket e Ajax, connettori per DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motori di template, 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. Per il multiplexing delle connessioni viene utilizzata la libreria libuv, che è un componente aggiuntivo di libev sui sistemi Unix e di IOCP su Windows. La libreria libeio viene utilizzata per creare un pool di thread e c-ares è integrato per eseguire query DNS in modalità non bloccante. 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 del motore V8 sviluppato da Google (inoltre Microsoft sta sviluppando una versione di Node.js con il motore Chakra-Core). Fondamentalmente, Node.js è simile ai framework Perl AnyEvent, Ruby Event Machine, Python Twisted e all'implementazione di eventi in Tcl, ma il loop degli eventi in Node.js è nascosto allo sviluppatore e assomiglia all'elaborazione degli eventi in un'applicazione web in esecuzione nel browser.

Fonte: opennet.ru

Aggiungi un commento