La plataforma JavaScript Node.js 22.0.0 está disponible.

Se ha lanzado Node.js 22.0, la plataforma para ejecutar aplicaciones de red en JavaScript. Node.js 22.0 está en las ramas de soporte a largo plazo, pero este estatus se asignará en octubre, tras realizar la estabilización. El soporte para Node.js 22.x se extenderá hasta el 30 de abril de 2027. El mantenimiento de la rama anterior LTS Node.js 20.x continuará hasta abril de 2026, mientras que la anteanterior LTS 18.x hasta abril de 2025. El soporte para la rama intermedia Node.js 21.x se detendrá el 1 de junio de 2024.

Principales mejoras:

  • El motor V8 se ha actualizado a la versión 12.4, utilizada en Chromium 124. Entre los cambios en comparación con la rama Node.js 21, que usaba el motor V8 11.8, se destacan:
    • Soporte para la extensión WasmGC, que simplifica la portabilidad a WebAssembly de programas escritos en lenguajes de programación que utilizan recolección de basura (Kotlin, PHP, Java, etc.). WasmGC añade nuevos tipos de estructuras y arreglos para los cuales se puede aplicar la asignación de memoria no lineal.
    • Soporte para el método Array.fromAsync(), que devuelve de manera asíncrona una nueva instancia del objeto Array, copiada de objetos similares a arreglos, enumerables (iterables) o enumerables de forma asíncrona (asynchronous iterable).
    • Soporte para métodos de trabajo con iteradores, como .map, .filter, .find, .take, .drop, .forEach y .reduce.
    • Soporte para el objeto Set, que define una colección de valores y ofrece métodos para realizar operaciones típicas sobre conjuntos, como intersecciones, uniones, diferencias y complementos.
  • El compilador JIT optimizador Maglev está habilitado por defecto, diseñado para generar rápidamente código máquina de alto rendimiento para código JavaScript en uso activo. La inclusión de Maglev permite acelerar notablemente el funcionamiento de aplicaciones CLI de corta duración que no realizan operaciones prolongadas; por ejemplo, el tiempo de prueba de Jetstream se reduce en un 7.5% y el de Speedometer en un 5%.
  • Se ha acelerado el manejo de flujos al aumentar el valor de la opción highWaterMark de 16 KB a 65 KB (define el límite hasta el cual se realiza el almacenamiento en búfer de escritura). Este cambio conlleva un aumento en el consumo de memoria, por lo que las aplicaciones diseñadas para trabajar con capacidades limitadas de RAM pueden requerir revertir el valor antiguo mediante la llamada a setDefaultHighWaterMark().
  • Se ha mejorado el rendimiento de la API fetch() y del test runner mediante una mayor eficiencia en la creación de instancias de AbortSignal. También se ha mejorado el rendimiento de la API relacionada con la interacción sincrónica con sistemas de archivos.
  • Se ha introducido una característica experimental que permite usar la llamada «require()» para cargar módulos JavaScript ESM (ECMAScript Modules) de forma sincrónica. Los módulos ESM se utilizan en navegadores y reemplazan los módulos CommonJS, específicos de Node.js. Para cargar un módulo ESM a través de «require()», debe ejecutarse de manera sincrónica (sin await en el nivel superior). El soporte se activa mediante la bandera «—experimental-require-module».
  • Se ha añadido una opción experimental para ejecutar scripts definidos en el archivo package.json utilizando el comando «—run ».
  • El comando «node —watch» ha sido trasladado a la categoría estable, implementando un modo de observación que permite reiniciar el proceso al cambiar un archivo importado (por ejemplo, al ejecutar «node —watch index.js», el proceso se reiniciará automáticamente al modificarse index.js).
  • Se ha estabilizado la implementación integrada de la API WebSocket, que permite usar WebSocket en modo cliente sin necesidad de instalar dependencias adicionales.
  • Se ha añadido soporte parcial para la API Navigator.
  • Se ha añadido soporte para el formato de compresión deflate-raw en la API Webstreams.
  • Se han añadido las funciones glob y globSync al módulo node:fsmodule para la coincidencia de rutas de archivos según un patrón.
  • Se ha mejorado el manejo de pilas IPv6 mal configuradas. Se ha implementado el algoritmo Happy Eyeballs para una rápida reversión en caso de problemas con el funcionamiento de IPv6.
  • Se ha declarado obsoleta la API util.
  • Se han actualizado las versiones de las dependencias: 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 puede utilizarse tanto para el soporte del trabajo de aplicaciones web en el servidor como para crear programas de red simples para clientes y servidores. Para ampliar la funcionalidad de las aplicaciones de Node.js, se ha preparado una gran colección de módulos, donde se pueden encontrar módulos con la implementación servidores y clientes HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, módulos para integración con varios frameworks web, manejadores de WebSocket y Ajax, conectores a bases de datos (MySQL, PostgreSQL, SQLite, MongoDB), sistemas de plantillas, motores CSS, implementaciones de algoritmos criptográficos y sistemas de autorización (OAuth), analizadores XML.

Para manejar un gran número de solicitudes paralelas, Node.js utiliza un modelo asíncrono de ejecución de código, que se basa en el manejo de eventos en modo no bloqueante y en la definición de manejadores de callbacks. Entre los métodos de multiplexión de conexiones se incluyen epoll, kqueue, /dev/poll y select. Para la multiplexión de conexiones se utiliza la biblioteca libuv, que es una capa sobre libev en sistemas Unix y sobre IOCP en Windows. La biblioteca libeio se utiliza para crear un grupo de hilos (thread pool) y c-ares está integrado para realizar consultas DNS en modo no bloqueante. Todas las llamadas al sistema que podrían bloquearse se ejecutan dentro del grupo de hilos y luego, al igual que los manejadores de señales, envían el resultado de su trabajo a través de un canal no nombrado (pipe).

El código JavaScript se ejecuta gracias al motor V8 desarrollado por Google (además, Microsoft desarrolla una versión de Node.js con el motor Chakra-Core). En esencia, Node.js es similar a los frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted y la implementación de eventos en Tcl, pero el ciclo de procesamiento de eventos (event loop) en Node.js está oculto para el desarrollador y recuerda el manejo de eventos en una aplicación web que se ejecuta en el navegador.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster