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

Se ha producido el lanzamiento de Node.js 20.0, una plataforma para ejecutar aplicaciones de red en JavaScript. Node.js 20.0 se ha asignado a la rama de soporte largo, pero este estado no se asignará hasta octubre, después de la estabilización. Node.js 20.x será compatible hasta el 30 de abril de 2026. El mantenimiento de la rama LTS 18.x anterior de Node.js durará hasta abril de 2025, y la rama LTS 16.x anterior hasta septiembre de 2023. La rama 14.x LTS se suspenderá el 30 de abril y la rama provisional Node.js 19.x el 1 de junio.

Principales mejoras:

  • El motor V8 se actualizó a la versión 11.3, que se usa en Chromium 113. De los cambios en comparación con la rama Node.js 19, que usaba el motor Chromium 107, las funciones String.prototype.isWellFormed y toWellFormed, Array.prototype y métodos TypedArray.prototype para trabajar con la copia en el cambio de objetos Array y TypedArray, indicador "v" en RegExp, soporte para cambiar el tamaño de ArrayBuffer y aumentar el tamaño de SharedArrayBuffer, llamada final en WebAssembly.
  • Se propone un mecanismo de modelo de permiso experimental que le permite restringir el acceso a ciertos recursos durante la ejecución. La compatibilidad con el modelo de permisos se habilita especificando el indicador "--experimental-permission" cuando se ejecuta. En la implementación inicial, se propusieron opciones para restringir el acceso de escritura (--allow-fs-write) y lectura (--allow-fs-read) a ciertas partes del FS, procesos secundarios (--allow-child-process) , complementos (--no-addons) y subprocesos (--allow-worker). Por ejemplo, para permitir escribir en el directorio /tmp y leer el archivo /home/index.js, puede especificar: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/inicio/index.js índice .js

    Para verificar el acceso, se sugiere usar el método process.permission.has(), por ejemplo, "process.permission.has('fs.write',"/tmp/test").

  • Los controladores para módulos externos ECMAScript (ESM) cargados a través de la opción "--experimental-loader" ahora se ejecutan en un subproceso separado, aislado del subproceso principal, lo que elimina la intersección del código de la aplicación y los módulos ESM cargados. De manera similar a los navegadores, el método import.meta.resolve() ahora se ejecuta sincrónicamente cuando se llama desde una aplicación. En una de las próximas ramas de Node.js, se planea mover el soporte de carga de ESM a la categoría de características estables.
  • El módulo node:test (test_runner), diseñado para crear y ejecutar pruebas de JavaScript que arrojan resultados en formato TAP (Test Anything Protocol), se movió a estable.
  • Se formó un equipo de rendimiento separado que, en preparación para la nueva rama, trabajó para acelerar varios componentes de tiempo de ejecución, incluido el análisis de URL, fetch() y EventTarget. Por ejemplo, la sobrecarga de inicialización de EventTarget se ha reducido a la mitad, el rendimiento del método URL.canParse() se ha mejorado significativamente y se ha mejorado la eficiencia de los temporizadores. Además, la composición incluye el lanzamiento de un analizador de URL de alto rendimiento: Ada 2.0, escrito en C ++.
  • Ha continuado el desarrollo de una función experimental para entregar aplicaciones en forma de un solo archivo ejecutable (SEA, Single Executable Applications). Crear un ejecutable ahora requiere sustituir un blob generado a partir de un archivo de configuración JSON (en lugar de sustituir un archivo JavaScript).
  • Compatibilidad mejorada de Web Crypto API con implementaciones de otros proyectos.
  • Se agregó soporte oficial para Windows en sistemas ARM64.
  • Compatibilidad continua con las extensiones WASI (WebAssembly System Interface) para crear aplicaciones WebAssembly independientes. Se eliminó la necesidad de especificar un indicador de línea de comando especial para habilitar la compatibilidad con WASI.

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