Plataforma de JavaScript del lado del servidor Node.js 21.0 disponible

Se lanzó Node.js 21.0, una plataforma para ejecutar aplicaciones de red en JavaScript. La rama Node.js 21.0 tendrá soporte durante 6 meses. En los próximos días se completará la estabilización de la rama Node.js 20, que recibirá el estado LTS y será compatible hasta abril de 2026. El mantenimiento de la rama LTS anterior de Node.js 18.0 durará hasta septiembre de 2025, y el año anterior a la última rama LTS 16.0 hasta abril de 2024.

Principales mejoras:

  • La API Fetch ha sido declarada estable, diseñada para cargar recursos a través de la red y simplificar la escritura de código JavaScript universal adecuado para trabajar en el lado del servidor y del cliente. La implementación se basa en el código del cliente undici HTTP/1.1 y es lo más parecida posible a la API similar proporcionada en los navegadores. La API incluye el método fetch() y objetos Headers. Solicitud y Respuesta, que representan los encabezados HTTP, solicitud y respuesta. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { datos constantes = esperar res.json(); consola.log(datos); }
  • Se ha estabilizado la compatibilidad con la API WebStreams, que proporciona acceso a los flujos de datos recibidos a través de la red. La API permite agregar sus propios controladores que trabajan con datos a medida que la información llega a través de la red, sin esperar a que se descargue el archivo completo. Los objetos disponibles en Node.js incluyen ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream y DecompressionStream.
  • Se agregó implementación experimental del cliente WebSocket, compatible con navegadores. Para habilitar la compatibilidad con WebSocket, se proporciona el indicador "--experimental-websocket".
  • Se agregó un modo experimental para usar la implementación predeterminada de módulos JavaScript ESM (módulos ECMAScript, utilizados en módulos para navegadores) en lugar de CommonJS (específico de Node.js). El cambio no afecta a los módulos cuyo formato se define explícitamente mediante el campo "tipo" en package.json, se especifica mediante el indicador "--input-type", o es obvio debido a la extensión del archivo (.mjs para ESM, .cjs para CommonJS). Sin embargo, los módulos que no estén definidos explícitamente como CommonJS (por ejemplo, que tengan una extensión ".js") se tratarán como módulos ESM cuando se habilite el nuevo modo. Para activar nuevas configuraciones del módulo, se ha propuesto el indicador “--experimental-default-type”.
  • El motor V8 se actualizó a la versión 11.8, utilizada en Chromium 118, que ahora admite el método ArrayBuffer.prototype.transfer, la capacidad de agrupar matrices (método groupBy) e instrucciones WebAssembly para procesar constantes (i32.add, i32.sub, i32.mul, i64.add, i64.sub y i64.mul).
  • Se ha descontinuado el soporte para el controlador globalPreload, a favor de las llamadas de registro e inicialización para configurar módulos.
  • Se ha agregado una opción de "vaciado" a la función fs.writeFile para forzar que los datos se vacíen en la unidad después de cada operación de escritura.
  • Rendimiento mejorado del código relacionado con el análisis de URL, recuperación de API, transmisiones, nodo:fs y HTTP.
  • Se agregó un objeto de navegador global. Por ejemplo, para obtener datos sobre la cantidad de núcleos de CPU, puede utilizar la propiedad navigator.hardwareConcurrency.
  • En el parámetro "—test", se agregó compatibilidad con máscaras globales para seleccionar las pruebas que se ejecutarán (por ejemplo, puede especificar "—test **/*.test.js").
  • Se han actualizado el administrador de paquetes incluido npm 10.2.0 y el analizador llhttp 9.1.2.
  • Se ha interrumpido la compatibilidad con Visual Studio 2019 y versiones de macOS anteriores a 11.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 garantizar el procesamiento de una gran cantidad de solicitudes paralelas, Node.js utiliza un modelo de ejecución de código asíncrono basado en el manejo de eventos sin bloqueo y la definición de controladores de devolución de llamada. Los métodos admitidos para multiplexar conexiones son epoll, kqueue, /dev/poll y select. Para la multiplexación de conexiones, se utiliza la biblioteca libuv, que es un complemento para libev en sistemas Unix e IOCP en Windows. La biblioteca libeio se utiliza para crear un grupo de subprocesos y c-ares está integrado para realizar consultas de DNS en modo sin bloqueo. Todas las llamadas al sistema que causan el bloqueo se ejecutan dentro del conjunto de subprocesos y luego, como controladores de señales, transfieren el resultado de su trabajo a través de una tubería sin nombre (tubería). La ejecución de código JavaScript se proporciona 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 Tcl, pero el bucle de eventos en Node.js está oculto para el desarrollador y se asemeja al manejo de eventos en una aplicación web que se ejecuta en el navegador. Al escribir aplicaciones para node.js, debe tener en cuenta las especificaciones de la programación basada en eventos, por ejemplo, en lugar de hacer "var result = db.query("select..");" con la espera de la finalización del trabajo y el posterior procesamiento de 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) {procesamiento de resultados});", en el que el control pasará instantáneamente a más código, y el resultado de la consulta se procesará a medida que lleguen los datos.

Fuente: opennet.ru

Añadir un comentario