Disponible la plataforma de JavaScript del servidor Node.js 20.0

Se ha lanzado Node.js 20.0, una plataforma para ejecutar aplicaciones de red en JavaScript. Node.js 20.0 se incluye en las ramas de soporte a largo plazo, aunque este estado se otorgará solo en octubre, tras la estabilización. El soporte para Node.js 20.x se mantendrá hasta el 30 de abril de 2026. El mantenimiento de la rama LTS anterior, Node.js 18.x, continuará hasta abril de 2025, y de la anterior a esa, Node.js 16.x, hasta septiembre de 2023. El soporte de la rama LTS 14.x se finalizará el 30 de abril, mientras que el de la rama intermedia Node.js 19.x lo hará el 1 de junio.

Principales mejoras:

  • El motor V8 se ha actualizado a la versión 11.3, utilizada en Chromium 113. Entre los cambios con respecto a la rama Node.js 19, que usaba el motor Chromium 107, se incluyen las funciones String.prototype.isWellFormed y toWellFormed, los métodos Array.prototype y TypedArray.prototype para trabajar con copias al modificar objetos Array y TypedArray, el flag "v" en RegExp, el soporte para el cambio de tamaño de ArrayBuffer y el aumento del tamaño de SharedArrayBuffer, y la recursión por cola (tail-call) en WebAssembly.
  • Предложен экспериментальный механизм Permission Model, позволяющий ограничить доступ к определённым ресурсам в процессе исполнения. Поддержка Permission Model включается через указание при запуске флага «—experimental-permission». В начальной реализации предложены опции для ограничения доступа на запись (—allow-fs-write) и чтение (—allow-fs-read) к определённым частям ФС, дочерним процессам (—allow-child-process), дополнениям (—no-addons) и потокам (—allow-worker). Например, чтобы разрешить запись в каталог /tmp и чтение файла /home/index.js можно указать: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home/index.js index.js

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

  • Los controladores de módulos ECMAScript (ESM), que se cargan a través de la opción "--experimental-loader", ahora se ejecutan en un hilo separado, aislado del hilo principal, lo que excluye la intersección entre el código de las aplicaciones y los módulos ESM cargados. Similar a los navegadores, el método import.meta.resolve() ahora se ejecuta en modo síncrono al ser llamado desde una aplicación. En una de las próximas ramas de Node.js, se planea que el soporte para la carga de ESM se convierta en una función estable.
  • El módulo node:test (test_runner), destinado a crear y ejecutar pruebas en JavaScript, que devuelven resultados en formato TAP (Test Anything Protocol), se ha trasladado a la categoría de estable.
  • Se ha formado un equipo de desarrolladores independiente responsable de la optimización del rendimiento, que al preparar una nueva rama, ha trabajado para acelerar varios componentes del runtime, incluyendo el análisis de URL, fetch() y EventTarget. Por ejemplo, los costos de inicialización de EventTarget se han reducido a la mitad, se ha mejorado significativamente el rendimiento del método URL.canParse() y se ha aumentado la eficiencia de los temporizadores. Además, se ha incluido el lanzamiento de un analizador de URL de alto rendimiento - Ada 2.0, escrito en C++.
  • Se ha continuado el desarrollo de la funcionalidad experimental para la entrega de aplicaciones en forma de un solo archivo ejecutable (SEA, Aplicaciones Ejecutables Autónomas). La creación del archivo ejecutable ahora requiere la sustitución de un blob, que se genera a partir de un archivo de configuración en formato JSON (en lugar de sustituir un archivo JavaScript).
  • Se ha mejorado la compatibilidad de la API Web Crypto con implementaciones de otros proyectos.
  • Se ha añadido soporte oficial para Windows en sistemas ARM64.
  • Se ha continuado la implementación del soporte para extensiones WASI (Interfaz de Sistema WebAssembly) para crear aplicaciones WebAssembly aisladas. Se ha eliminado la necesidad de especificar una bandera de línea de comandos especial para habilitar el soporte de WASI.

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