Lanzouse Node.js 22.0, unha plataforma para executar aplicacións de rede en JavaScript. Node.js 22.0 clasifícase como unha rama de soporte a longo prazo, pero este estado asignarase só en outubro, despois da estabilización. Node.js 22.x será compatible ata o 30 de abril de 2027. O mantemento da rama LTS anterior de Node.js 20.x durará ata abril de 2026 e o ano anterior á última rama 18.x de LTS ata abril de 2025. A rama de posta en escena de Node.js 21.x deixará de funcionar o 1 de xuño de 2024.
Melloras principais:
- O motor V8 actualizouse á versión 12.4, utilizada en Chromium 124. Entre os cambios en comparación coa rama Node.js 21, que utilizaba o motor V8 11.8), nótase:
- Soporte para a extensión WasmGC, que simplifica a portabilidade de programas escritos en linguaxes de programación que usan un colector de lixo (Kotlin, PHP, Java, etc.) a WebAssembly. WasmGC engade novos tipos de estruturas e matrices que poden usar a asignación de memoria non lineal.
- Compatibilidade co método Array.fromAsync(), que devolve de forma asíncrona unha nova instancia dun obxecto Array copiado desde un obxecto iterable tipo matriz, iterable ou asíncrono.
- Compatibilidade con métodos iteradores como .map, .filter, .find, .take, .drop, .forEach e .reduce.
- Soporte para un obxecto Set que define unha colección de valores e ofrece métodos que implementan operacións de conxunto comúns, como intersección, unión, diferenza e suma.
- O compilador JIT de optimización de Maglev está activado por defecto, co obxectivo de xerar rapidamente código de máquina de alto rendemento para código JavaScript moi utilizado. A habilitación de Maglev pode acelerar significativamente as aplicacións CLI de curta duración que non realizan operacións a longo prazo, por exemplo, o tempo para completar a proba Jetstrea redúcese nun 7.5 % e a proba do velocímetro nun 5 %.
- O traballo con fluxos acelerouse ao aumentar o valor da opción highWaterMark de 16 KB a 65 KB (define o límite ata o que se almacena a gravación). O cambio ten como resultado un aumento do consumo de memoria, polo que é posible que as aplicacións deseñadas para executarse con RAM limitada teñan que volver ao valor antigo mediante unha chamada a setDefaultHighWaterMark().
- Mellorouse o rendemento das API de fetch() e do corredor de proba facendo que a instanciación de AbortSignal sexa máis eficiente. Mellorouse o rendemento das API relacionadas co traballo sincrónico con sistemas de ficheiros.
- Proporcionouse unha función experimental para usar a chamada "require()" para cargar módulos JavaScript ESM (módulos ECMAScript) en modo síncrono. Os módulos ESM úsanse nos navegadores e substitúen os módulos CommonJS específicos de Node.js. Para cargar mediante "require()", o módulo ESM debe executarse en modo síncrono (sen esperar no nivel superior). O soporte está habilitado mediante a marca "--experimental-require-module".
- Engadiuse a capacidade experimental para executar scripts definidos no ficheiro package.json mediante o comando "--run". "
- O comando “node –watch” moveuse á categoría estable coa implementación dun modo de vixilancia que garante que o proceso se reinicie cando cambia o ficheiro importado (por exemplo, se se executa “node –watch index.js”, o proceso reiniciarase automaticamente cando cambie index.js).
- Estabilizouse a implementación nativa da API de WebSocket, o que permite que WebSocket se use en modo cliente sen instalar dependencias adicionais.
- Engadiuse compatibilidade parcial para a API de Navigator.
- A API de Webstreams engadiu soporte para o formato de compresión desinflado-raw.
- Engadíronse funcións glob e globSync a node:fsmodule para a correspondencia de patróns de rutas de ficheiros.
- Mellorouse o manexo das pilas IPv6 configuradas incorrectamente. Implementouse o algoritmo Happy Eyeballs para unha recuperación rápida en caso de problemas co funcionamento de IPv6.
- A API util quedou en desuso.
- Versións de dependencia actualizadas: 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 e undici. .
A plataforma Node.js pódese empregar tanto para o soporte do lado do servidor de aplicacións web como para crear programas de rede estándar do lado do cliente e do servidor. Para ampliar a funcionalidade das aplicacións Node.js, preparouse unha gran colección de módulos, incluíndo os que implementan servidores e clientes de HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, módulos para integración con varios frameworks web, xestores WebSocket e Ajax, conectores a DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motores de modelos, motores CSS, implementacións de algoritmos criptográficos e sistemas de autorización (OAuth), analizadores XML.
Para xestionar un gran número de solicitudes paralelas, Node.js usa un modelo de execución de código asíncrono baseado no procesamento de eventos sen bloqueo e na definición de controladores de devolución de chamada. Os métodos compatibles para multiplexar conexións inclúen epoll, kqueue, /dev/poll e select. Para a multiplexación de conexións, úsase a biblioteca libuv, que é un complemento para libev en sistemas Unix e para IOCP en Windows. A biblioteca libeio úsase para crear un grupo de fíos e c-ares está integrado para realizar consultas DNS nun modo sen bloqueo. Todas as chamadas ao sistema que provocan o bloqueo execútanse dentro do grupo de subprocesos e despois, como os controladores de sinal, pasan de volta o resultado do seu traballo a través dunha canalización sen nome.
A execución do código JavaScript está garantida mediante o uso do motor V8 desenvolvido por Google (ademais, Microsoft está a desenvolver unha versión de Node.js co motor Chakra-Core). No seu núcleo, Node.js é semellante aos marcos Perl AnyEvent, Ruby Event Machine, Python Twisted e á implementación de eventos en Tcl, pero o bucle de eventos en Node.js está oculto para o programador e aseméllase ao procesamento de eventos nunha aplicación web. executando no navegador.
Fonte: opennet.ru
