Está disponible la plataforma de JavaScript del servidor Node.js 21.0

Se ha lanzado Node.js 21.0, una plataforma para la ejecución de aplicaciones de red en JavaScript. El soporte para la rama Node.js 21.0 se proporcionará durante 6 meses. En los próximos días se completará la estabilización de la rama Node.js 20, que obtendrá el estatus LTS y será soportada hasta abril de 2026. El soporte para la anterior rama LTS Node.js 18.0 se prolongará hasta septiembre de 2025, y para la antepasada LTS 16.0 hasta abril de 2024.

Principales mejoras:

  • Se ha declarado estable la API Fetch, destinada a la descarga de recursos a través de la red, facilitando la escritura de código JavaScript universal apto para el lado del servidor y del cliente. La implementación se basa en el código del cliente undici de HTTP/1.1 y está lo más cerca posible de la API similar proporcionada en los navegadores. La API incluye el método fetch() y los objetos Headers, Request y Response, que representan los encabezados HTTP, la solicitud y la respuesta. const res = await fetch(‘https://nodejs.org/api/documentation.json’); if (res.ok) { const data = await res.json(); console.log(data); }
  • Se ha estabilizado el soporte para la API WebStreams, que proporciona acceso a flujos de datos recibidos a través de la red. La API permite agregar tus propios manejadores que trabajan con los datos a medida que la información llega, sin esperar a que se cargue todo el archivo. En Node.js están disponibles objetos como ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream y DecompressionStream.
  • Se ha añadido una implementación experimental del cliente WebSocket, compatible con los navegadores.. Para habilitar el soporte de WebSocket, se ha previsto una bandera «—experimental-websocket».
  • Se ha añadido un modo experimental por defecto para utilizar la implementación de módulos JavaScript ESM (ECMAScript Modules, aplicables en módulos para navegadores) en lugar de CommonJS (específico de Node.js). Este cambio no afecta a los módulos cuyo formato está explícitamente definido a través del campo «type» en package.json, establecido mediante la bandera «—input-type» o evidente por la extensión del archivo (.mjs para ESM, .cjs para CommonJS). Así, los módulos que no están definidos explícitamente como CommonJS (por ejemplo, aquellos con la extensión «.js»), al activar el nuevo modo se tratarán como módulos ESM. Para activar la nueva configuración de los módulos se ha propuesto la bandera «—experimental-default-type».
  • El motor V8 se ha actualizado a la versión 11.8, utilizada en Chromium 118, que introduce soporte para el método ArrayBuffer.prototype.transfer, la capacidad de agrupar matrices (método groupBy) y las instrucciones de WebAssembly para el manejo de constantes (i32.add, i32.sub, i32.mul, i64.add, i64.sub e i64.mul).
  • Se ha descontinuado el soporte del manejador globalPreload, y en su lugar se deben utilizar las llamadas register e initialize para configurar los módulos.
  • Se ha añadido la opción 'flush' a la función fs.writeFile para forzar el volcado de datos al almacenamiento después de cada operación de escritura.
  • Se ha mejorado el rendimiento del código relacionado con el análisis de URL, API fetch, streams, node:fs y HTTP.
  • Se ha añadido el objeto global navigator. Por ejemplo, para obtener datos sobre el número de núcleos de la CPU, se puede usar la propiedad navigator.hardwareConcurrency.
  • Se ha añadido soporte para patrones glob en el parámetro '--test' para seleccionar las pruebas a ejecutar (por ejemplo, se puede especificar '--test **/*.test.js').
  • Se han actualizado a la versión 10.2.0 del gestor de paquetes npm y a la versión 9.1.2 del parser llhttp que viene incluido.
  • Se ha descontinuado el soporte para Visual Studio 2019 y versiones de macOS anteriores a la 11.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 garantizar el procesamiento de un gran número de solicitudes paralelas, Node.js utiliza un modelo asíncrono para la ejecución de código, basado en el manejo de eventos en modo no bloqueante y la definición de manejadores de callback. Se soportan métodos de multiplexión de conexiones como epoll, kqueue, \/dev\/poll y select. Para la multiplexión de conexiones se utiliza la biblioteca libuv, que es una capa superior a libev en sistemas Unix y a IOCP en Windows. Para crear un grupo de hilos se utiliza la biblioteca libeio, y para realizar consultas DNS en modo no bloqueante se integra c-ares. Todas las llamadas al sistema que causan bloqueo se llevan a cabo dentro del grupo de hilos y luego, al igual que los manejadores de señales, envían el resultado de su trabajo de vuelta a través de un canal anónimo (pipe). La ejecución de código JavaScript se garantiza mediante el uso del motor V8 desarrollado por Google (además, Microsoft desarrolla una variante 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 manejo de eventos (event loop) en Node.js está oculto al desarrollador y se asemeja al manejo de eventos en una aplicación web ejecutándose en un navegador. Al escribir aplicaciones para Node.js, es necesario tener en cuenta la especificidad de la programación orientada a eventos, por ejemplo, en lugar de ejecutar "var result = db.query('select..');" esperando a que termine y luego procesar los resultados, Node.js utiliza el principio de ejecución asíncrona, es decir, el código se transforma en "db.query('select..', function (result) {procesar resultado});", donde el control se transfiere de inmediato al código siguiente, y el resultado de la consulta se procesará a medida que lleguen los datos.

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