È stata rilasciata la versione 25.0.0 di Node.js, una piattaforma per l'esecuzione di applicazioni di rete in JavaScript. Node.js 25.0 appartiene ai rami intermedi, il cui supporto sarà fornito per 7 mesi (fino a giugno 2026). Nei prossimi giorni verrà completata la stabilizzazione del ramo Node.js 24, che a fine ottobre otterrà lo status di LTS e sarà supportato fino ad aprile 2028. Il supporto per i precedenti rami LTS di Node.js 22.x e 20.x durerà fino ad aprile 2027 e 2026 rispettivamente.
Principali miglioramenti:
- Il motore V8 è stato aggiornato alla versione 14.1, in uso in Chromium 141. Tra i miglioramenti rispetto alla precedente versione di Node.js, si segnala un notevole aumento delle prestazioni del metodo JSON.stringify, l'ottimizzazione di WebAssembly e JIT, e l'implementazione di metodi per la conversione tra Uint8Array e dati in formato base64 o rappresentazione esadecimale.
- Nel meccanismo Permission Model, che consente di limitare l'accesso a determinate risorse durante l'esecuzione, è stata aggiunta l'opzione «—allow-net» per consentire l'accesso di rete (se non viene specificata l'opzione «—allow-net», l'esecuzione di Node.js in modalità «—permission» restituirà un errore ERR_ACCESS_DENIED durante i tentativi di eseguire operazioni di rete).
- Abilitato per impostazione predefinita compatibile con i browser API Web Storage, destinata allo stoccaggio permanente (classe localStorage) o temporaneo (classe sessionStorage) di dati in formato chiave/valore. L'etichetta di sviluppo sperimentale è stata rimossa dall'API Web Storage.
- La classe ErrorEvent è stata spostata nella categoria globale (può essere utilizzata senza un'importazione esplicita) e fornisce un'interfaccia compatibile con i browser per gestire eventi con informazioni sugli errori.
- Per WebAssembly è stata introdotta la compatibilità con l'API JSPI (JavaScript Promise Integration), che consente di interagire con Web API asincroni da codice eseguito in sequenza, compilato in WebAssembly.
- Aggiunta l'opzione «NODE_COMPILE_CACHE_RELATIVE_PATH» per un funzionamento portabile con la cache degli oggetti compilati. In questa modalità, gli hash per identificare gli oggetti vengono calcolati utilizzando percorsi relativi ai file, consentendo il movimento e l'inclusione del contenuto della directory del codice insieme alla cache.
- Aggiunta la possibilità di profilare il carico sulla CPU.
- Il gestore pacchetti NPM è stato aggiornato alla versione 11.6.2.
- Aggiunta la compatibilità con Python 3.14.
- Le versioni minime supportate dichiarate sono Clang 19 e Xcode 16.4.
- Il supporto per l'oggetto SlowBuffer è stato interrotto, precedentemente dichiarato obsoleto a causa di potenziali problemi di sicurezza. Si consiglia di utilizzare il metodo Buffer.allocUnsafeSlow() al suo posto.
La piattaforma Node.js può essere utilizzata sia per il supporto server lato Web di applicazioni che per creare normali programmi client e server di rete. Per espandere la funzionalità delle applicazioni Node.js è stata preparata una vasta collezione di moduli, in cui si possono trovare moduli con implementazione server e client HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli per integrazioni con diversi framework web, gestori WebSocket e Ajax, connettori a DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motori di templating, 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 asincrono per l'esecuzione del codice, basato sulla gestione degli eventi in modalità non bloccante e sulla definizione dei callback. Tra i metodi supportati per il multiplexing delle connessioni ci sono epoll, kqueue, /dev/poll e select. Per il multiplexing delle connessioni viene utilizzata la libreria libuv, che funge da wrapper per libev su sistemi Unix e per IOCP su Windows. Per creare un pool di thread, viene utilizzata la libreria libeio, mentre le richieste DNS in modalità non bloccante vengono eseguite tramite c-ares. Tutti i sistemi di chiamata che causano blocchi vengono eseguiti all'interno del pool di thread e poi, come i gestori di segnali, restituiscono il risultato del loro lavoro tramite una pipe non denominata.
L'esecuzione del codice JavaScript è garantita attraverso l'uso del motore V8 sviluppato da Google (inoltre, Microsoft sviluppa una variante di Node.js con il motore Chakra-Core). Fondamentalmente, Node.js è simile a framework come Perl AnyEvent, Ruby Event Machine, Python Twisted e all'implementazione degli 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.
Fonte: opennet.ru
