Plataforma JavaScript Node.js 22.0.0 dispoñible

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

Engadir un comentario