Plataforma JavaScript Node.js 22.0.0 disponible

Se lanzó Node.js 22.0, una plataforma para ejecutar aplicaciones de red en JavaScript. Node.js 22.0 está clasificado como una rama de soporte a largo plazo, pero este estado no se asignará hasta octubre, después de la estabilización. Node.js 22.x será compatible hasta el 30 de abril de 2027. El mantenimiento de la rama LTS anterior de Node.js 20.x durará hasta abril de 2026, y el año anterior a la última rama LTS 18.x hasta abril de 2025. La rama provisional de Node.js 21.x se suspenderá el 1 de junio de 2024.

Principales mejoras:

  • El motor V8 ha sido actualizado a la versión 12.4, utilizada en Chromium 124. Entre los cambios respecto a la rama Node.js 21, que utilizaba el motor V8 11.8), se destaca:
    • Soporte para la extensión WasmGC, que simplifica la migración de programas escritos en lenguajes de programación que utilizan un recolector de basura (Kotlin, PHP, Java, etc.) a WebAssembly. WasmGC agrega nuevos tipos de estructuras y matrices que pueden usar asignación de memoria no lineal.
    • Soporte para el método Array.fromAsync(), que devuelve de forma asincrónica una nueva instancia de un objeto Array copiado de un objeto iterable, iterable o asíncrono similar a una matriz.
    • Soporte para métodos iteradores como .map, .filter, .find, .take, .drop, .forEach y .reduce.
    • Soporte para un objeto Set que define una colección de valores y ofrece métodos que implementan operaciones de conjuntos comunes, como intersección, unión, diferencia y suma.
  • El compilador JIT de optimización Maglev está habilitado de forma predeterminada y tiene como objetivo generar rápidamente código de máquina de alto rendimiento para código JavaScript muy utilizado. Habilitar Maglev puede acelerar significativamente las aplicaciones CLI de corta duración que no realizan operaciones a largo plazo; por ejemplo, el tiempo para completar la prueba Jetstrea se reduce en un 7.5 % y la prueba del velocímetro en un 5 %.
  • El trabajo con transmisiones se ha acelerado aumentando el valor de la opción highWaterMark de 16 KB a 65 KB (define el límite hasta el cual se almacena en el búfer la grabación). El cambio da como resultado un mayor consumo de memoria, por lo que las aplicaciones diseñadas para ejecutarse en RAM limitada pueden necesitar volver al valor anterior mediante una llamada a setDefaultHighWaterMark().
  • Se mejoró el rendimiento de las API fetch() y test runner al hacer que la creación de instancias de AbortSignal sea más eficiente. Se ha mejorado el rendimiento de las API relacionadas con el trabajo sincrónico con sistemas de archivos.
  • Se ha proporcionado una función experimental para utilizar la llamada "require()" para cargar módulos JavaScript ESM (módulos ECMAScript) en modo síncrono. Los módulos ESM se utilizan en navegadores y reemplazan los módulos CommonJS específicos de Node.js. Para cargar a través de "require()", el módulo ESM debe ejecutarse en modo síncrono (sin espera en el nivel superior). El soporte se habilita a través del indicador “--experimental-require-module”.
  • Se agregó la capacidad experimental para ejecutar scripts definidos en el archivo package.json usando el comando "--run" "
  • El comando “node –watch” se ha movido a la categoría estable con la implementación de un modo de vigilancia que garantiza que el proceso se reinicie cuando el archivo importado cambia (por ejemplo, si se ejecuta “node –watch index.js”, el El proceso se reiniciará automáticamente cuando cambie index.js).
  • La implementación nativa de la API de WebSocket se ha estabilizado, lo que permite utilizar WebSocket en modo cliente sin instalar dependencias adicionales.
  • Se agregó soporte parcial para la API Navigator.
  • La API de Webstreams ha agregado soporte para el formato de compresión sin formato.
  • Se agregaron funciones glob y globSync a node:fsmodule para la coincidencia de patrones de rutas de archivos.
  • Manejo mejorado de pilas IPv6 configuradas incorrectamente. Se implementó el algoritmo Happy Eyeballs para una reversión rápida en caso de problemas con el funcionamiento de IPv6.
  • La API de utilidad ha quedado obsoleta.
  • Versiones 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 y undici 6.6.0 .

La plataforma Node.js se puede utilizar tanto para el mantenimiento de servidores de aplicaciones web como para crear programas regulares de red de clientes y servidores. Para ampliar la funcionalidad de las aplicaciones para Node.js, se ha preparado una gran colección de módulos, en la que se pueden encontrar módulos con la implementación de servidores y clientes HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, módulos para integración con varios marcos web, controladores WebSocket y Ajax, conectores DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motores de plantillas, motores CSS, implementaciones de algoritmos criptográficos y sistemas de autorización (OAuth), analizadores XML.

Para manejar una gran cantidad de solicitudes paralelas, Node.js utiliza un modelo de ejecución de código asincrónico basado en el procesamiento de eventos sin bloqueo y la definición de controladores de devolución de llamada. Los métodos admitidos para multiplexar conexiones incluyen epoll, kqueue, /dev/poll y select. Para la multiplexación de conexiones se utiliza la biblioteca libuv, que es un complemento de libev en sistemas Unix y de IOCP en Windows. La biblioteca libeio se utiliza para crear un grupo de subprocesos y c-ares está integrado para realizar consultas DNS en modo sin bloqueo. Todas las llamadas al sistema que causan el bloqueo se ejecutan dentro del grupo de subprocesos y luego, como manejadores de señales, pasan el resultado de su trabajo a través de una tubería sin nombre.

La ejecución del código JavaScript está garantizada mediante el uso del motor V8 desarrollado por Google (además, Microsoft está desarrollando una versión de Node.js con el motor Chakra-Core). En esencia, Node.js es similar a los marcos Perl AnyEvent, Ruby Event Machine, Python Twisted y la implementación de eventos en Tcl, pero el bucle de eventos en Node.js está oculto para el desarrollador y se asemeja al procesamiento de eventos en una aplicación web. ejecutándose en el navegador.

Fuente: opennet.ru

Añadir un comentario