Es va llançar Node.js 22.0, una plataforma per executar aplicacions de xarxa en JavaScript. Node.js 22.0 es classifica com una branca de suport a llarg termini, però aquest estat només s'assignarà a l'octubre, després de l'estabilització. Node.js 22.x serà compatible fins al 30 d'abril de 2027. El manteniment de la branca LTS anterior de Node.js 20.x durarà fins a l'abril de 2026 i l'any anterior a l'última branca LTS 18.x fins a l'abril de 2025. La branca de prova de Node.js 21.x s'interromprà l'1 de juny de 2024.
Principals millores:
- El motor V8 s'ha actualitzat a la versió 12.4, utilitzada a Chromium 124. Entre els canvis en comparació amb la branca Node.js 21, que utilitzava el motor V8 11.8), cal destacar:
- Suport per a l'extensió WasmGC, que simplifica la portabilitat de programes escrits en llenguatges de programació que utilitzen un col·lector d'escombraries (Kotlin, PHP, Java, etc.) a WebAssembly. WasmGC afegeix nous tipus d'estructures i matrius que poden utilitzar l'assignació de memòria no lineal.
- Suport per al mètode Array.fromAsync(), que retorna de manera asíncrona una nova instància d'un objecte Array copiat d'un objecte iterable, iterable o asíncron com una matriu.
- Suport per a mètodes iteradors com ara .map, .filter, .find, .take, .drop, .forEach i .reduce.
- Suport per a un objecte Set que defineix una col·lecció de valors i ofereix mètodes que implementen operacions de conjunt comunes, com ara intersecció, unió, diferència i suma.
- El compilador JIT d'optimització de Maglev està habilitat per defecte, amb l'objectiu de generar ràpidament codi màquina d'alt rendiment per a codi JavaScript molt utilitzat. L'habilitació de Maglev pot accelerar significativament les aplicacions CLI de curta durada que no realitzen operacions a llarg termini, per exemple, el temps per completar la prova Jetstrea es redueix un 7.5% i la prova del velocímetre en un 5%.
- El treball amb fluxos s'ha accelerat augmentant el valor de l'opció highWaterMark de 16 KB a 65 KB (defineix el límit fins al qual s'emmagatzema la gravació). El canvi comporta un augment del consum de memòria, de manera que és possible que les aplicacions dissenyades per executar-se amb RAM limitada hagin de tornar al valor antic mitjançant una trucada a setDefaultHighWaterMark().
- S'ha millorat el rendiment de les API fetch() i test runner fent que la instanciació d'AbortSignal sigui més eficient. S'ha millorat el rendiment de les API relacionades amb el treball síncron amb sistemes de fitxers.
- S'ha proporcionat una funció experimental per utilitzar la crida "require()" per carregar mòduls JavaScript ESM (mòduls ECMAScript) en mode síncron. Els mòduls ESM s'utilitzen als navegadors i substitueixen els mòduls CommonJS específics de Node.js. Per carregar mitjançant "require()", el mòdul ESM s'ha d'executar en mode síncron (sense esperar al nivell superior). El suport s'habilita mitjançant la marca "--experimental-require-module".
- S'ha afegit la capacitat experimental per executar scripts definits al fitxer package.json mitjançant l'ordre "--run". "
- L'ordre “node –watch” s'ha mogut a la categoria estable amb la implementació d'un mode de vigilància que garanteix que el procés es reinicia quan canvia el fitxer importat (per exemple, si s'executa “node –watch index.js”, el el procés es reiniciarà automàticament quan canviï index.js).
- La implementació nativa de l'API de WebSocket s'ha estabilitzat, permetent que WebSocket s'utilitzi en mode client sense instal·lar dependències addicionals.
- S'ha afegit suport parcial per a l'API Navigator.
- L'API de Webstreams ha afegit suport per al format de compressió desinflat-raw.
- S'han afegit funcions glob i globSync al node:fsmodule per a la concordança de patrons dels camins dels fitxers.
- Gestió millorada de les piles IPv6 configurades incorrectament. S'ha implementat l'algoritme Happy Eyeballs per a una recuperació ràpida en cas de problemes amb el funcionament d'IPv6.
- L'API util ha quedat obsoleta.
- Versions de dependència actualitzades: 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 a 3.8.0, ada 2.7.7 i undici. .
La plataforma Node.js es pot utilitzar tant per al suport del costat del servidor d'aplicacions web com per a la creació de programes de xarxa estàndard del costat del client i del servidor. Per ampliar la funcionalitat de les aplicacions Node.js, s'ha preparat una gran col·lecció de mòduls, inclosos els que implementen servidors i clients de HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, mòduls per a la integració amb diversos frameworks web, controladors WebSocket i Ajax, connectors a SGBD (MySQL, PostgreSQL, SQLite, MongoDB), motors de plantilles, motors CSS, implementacions d'algoritmes criptogràfics i sistemes d'autorització (OAuth), analitzadors XML.
Per gestionar un gran nombre de sol·licituds paral·leles, Node.js utilitza un model d'execució de codi asíncron basat en el processament d'esdeveniments sense bloqueig i en la definició de controladors de devolució de trucada. Els mètodes admesos per a la multiplexació de connexions inclouen epoll, kqueue, /dev/poll i select. Per a la multiplexació de connexions, s'utilitza la biblioteca libuv, que és un complement a libev en sistemes Unix i a IOCP a Windows. La biblioteca libeio s'utilitza per crear un grup de fils i c-ares s'integra per realitzar consultes DNS en un mode sense bloqueig. Totes les trucades al sistema que causen bloqueig s'executen dins del grup de fils i després, com els controladors de senyals, tornen el resultat del seu treball a través d'una canonada sense nom.
L'execució del codi JavaScript s'assegura mitjançant l'ús del motor V8 desenvolupat per Google (a més, Microsoft està desenvolupant una versió de Node.js amb el motor Chakra-Core). En el seu nucli, Node.js és similar als marcs Perl AnyEvent, Ruby Event Machine, Python Twisted i la implementació d'esdeveniments a Tcl, però el bucle d'esdeveniments a Node.js està ocult per al desenvolupador i s'assembla al processament d'esdeveniments en una aplicació web. s'executa al navegador.
Font: opennet.ru
