È stato rilasciato Node.js 25.0.0, la piattaforma per l'esecuzione di applicazioni web scritte in JavaScript. Node.js 25.0 è classificato come una versione intermedia, il cui supporto durerà per 7 mesi (fino a giugno 2026). Nei prossimi giorni sarà completata la stabilizzazione della versione Node.js 24, che a fine ottobre otterrà lo stato LTS e sarà supportata fino ad aprile 2028. Il supporto per le versioni LTS precedenti Node.js 22.x e 20.x continuerà fino ad aprile 2027 e 2026 rispettivamente.
Miglioramenti principali:
- Il motore V8 è stato aggiornato alla versione 14.1, utilizzata in Chromium 141. Tra i miglioramenti rispetto alla precedente versione di Node.js spicca un significativo 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 modello di autorizzazione Permission Model, che consente di limitare l'accesso a determinate risorse durante l'esecuzione, è stata aggiunta l'opzione "--allow-net" per garantire l'accesso di rete (se non è specificata l'opzione "--allow-net", l'esecuzione di Node.js in modalità "--permission" restituirà un errore ERR_ACCESS_DENIED quando si tenta di eseguire operazioni di rete).
- Abilitato per impostazione predefinita compatibile con i browser API Web Storage, progettato per la memorizzazione permanente (classe localStorage) o temporanea (classe sessionStorage) di dati in formato chiave/valore. Rimozione dell'etichetta di sviluppo sperimentale dall'API Web Storage.
- Nella categoria globalmente accessibile (utilizzabile senza importazione esplicita) è stata tradotta la classe ErrorEvent, che fornisce un'interfaccia compatibile con i browser per la gestione degli eventi con informazioni sugli errori.
- Per WebAssembly è stata inclusa la supporto dell'API JSPI (JavaScript Promise Integration), che consente di accedere ad API Web asincrone da codice eseguito in sequenza, compilato in WebAssembly.
- Aggiunta l'opzione «NODE_COMPILE_CACHE_RELATIVE_PATH» per un lavoro portatile con la cache degli oggetti compilati. In questo modo, gli hash per identificare gli oggetti vengono calcolati utilizzando percorsi relativi ai file, consentendo di spostare e incorporare il contenuto della directory del codice insieme alla cache.
- È stata aggiunta la possibilità di profilare il carico della CPU.
- Il gestore pacchetti NPM è stato aggiornato alla versione 11.6.2.
- Aggiunto supporto per 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. Invece di SlowBuffer, si dovrebbe utilizzare il metodo Buffer.allocUnsafeSlow().
La piattaforma Node.js può essere utilizzata sia per il supporto server delle applicazioni web, sia per creare normali programmi di rete client e server. Per espandere le funzionalità delle applicazioni Node.js, è disponibile un'ampia collezione di moduli, in cui è possibile trovare moduli con implementazioni 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 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 del codice asincrono basato sul trattamento degli eventi in modalità non bloccante e sulla definizione di callback. Tra i metodi supportati per il multiplexing delle connessioni ci sono epoll, kqueue, /dev/poll e select. La libreria libuv funge da supporto per il multiplexing delle connessioni, operando su libev nei sistemi Unix e su IOCP in Windows. Per creare un pool di thread viene utilizzata la libreria libeio, mentre per eseguire richieste DNS in modalità non bloccante è integrato 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 attraverso una pipe anonima.
L'esecuzione del codice JavaScript è garantita attraverso l'uso 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 degli eventi in Tcl, ma il ciclo di elaborazione degli eventi in Node.js è nascosto agli sviluppatori e ricorda l'elaborazione degli eventi in un'app web che funziona nel browser.
Fonte: opennet.ru
