Plataforma JavaScript do servidor Node.js 20.0 dispoñible

Produciuse o lanzamento de Node.js 20.0, unha plataforma para executar aplicacións de rede en JavaScript. Node.js 20.0 foi asignado á rama de soporte longa, pero este estado non se asignará ata outubro, despois da estabilización. Node.js 20.x será compatible ata o 30 de abril de 2026. O mantemento da rama anterior de Node.js 18.x LTS durará ata abril de 2025 e a rama anterior de 16.x LTS ata setembro de 2023. A rama 14.x LTS manterase o 30 de abril e a rama provisional Node.js 19.x o 1 de xuño.

Melloras principais:

  • O motor V8 actualizouse á versión 11.3, que se usa en Chromium 113. Dos cambios en comparación coa rama Node.js 19, que utilizaba o motor Chromium 107, as funcións String.prototype.isWellFormed e toWellFormed, o Array.prototype. e métodos TypedArray.prototype para traballar con copia no cambio de obxectos Array e TypedArray, bandeira "v" en RegExp, soporte para cambiar o tamaño de ArrayBuffer e aumentar o tamaño de SharedArrayBuffer, chamada de cola en WebAssembly.
  • Proponse un mecanismo experimental de Modelo de Permiso que permite restrinxir o acceso a certos recursos durante a execución. A compatibilidade con modelos de permisos habilitarase especificando a marca "--experimental-permission" cando se executa. Na implementación inicial, propuxéronse opcións para restrinxir o acceso de escritura (--allow-fs-write) e lectura (--allow-fs-read) a certas partes do FS, procesos fillos (--allow-child-process) , complementos (--no-addons ) e fíos (--allow-worker). Por exemplo, para permitir escribir no directorio /tmp e ler o ficheiro /home/index.js, pode especificar: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js índice .js

    Para comprobar o acceso, recoméndase utilizar o método process.permission.has(), por exemplo, "process.permission.has('fs.write',"/tmp/test").

  • Os controladores de módulos externos (ESM) ECMAScript cargados mediante a opción "--experimental-loader" agora execútanse nun fío separado, illado do fío principal, o que elimina a intersección do código da aplicación e dos módulos ESM cargados. Do mesmo xeito que os navegadores, o método import.meta.resolve() agora execútase de forma sincronizada cando se chama dende unha aplicación. Nunha das seguintes ramas de Node.js, está previsto que o soporte de carga de ESM pase á categoría de funcións estables.
  • O módulo node:test (test_runner), deseñado para crear e executar probas de JavaScript que devolven resultados en formato TAP (Protocolo de proba de calquera cousa), moveuse a estable.
  • Formouse un equipo de rendemento separado que, en preparación para a nova rama, traballou para acelerar varios compoñentes de execución, incluíndo a análise de URL, fetch() e EventTarget. Por exemplo, a sobrecarga de inicialización do EventTarget reduciuse á metade, o rendemento do método URL.canParse() mellorouse significativamente e a eficiencia dos temporizadores mellorouse. Ademais, inclúese na composición o lanzamento dun analizador de URL de alto rendemento: Ada 2.0, escrito en C++.
  • Continuou o desenvolvemento dunha función experimental para entregar aplicacións en forma de ficheiro executable único (SEA, Single Executable Applications). A creación dun executable agora require substituír un blob xerado a partir dun ficheiro de configuración JSON (en lugar de substituír un ficheiro JavaScript).
  • Compatibilidade mellorada da API Web Crypto con implementacións doutros proxectos.
  • Engadido soporte oficial para Windows nos sistemas ARM64.
  • Soporte continuo para as extensións WASI (WebAssembly System Interface) para crear aplicacións WebAssembly autónomas. Eliminouse a necesidade de especificar unha marca especial de liña de comandos para habilitar a compatibilidade con WASI.

A plataforma Node.js pódese utilizar tanto para o mantemento do servidor de aplicacións web como para a creación de programas habituais de rede de servidor e cliente. Para ampliar a funcionalidade das aplicacións para Node.js, preparouse unha gran colección de módulos, nos que se poden atopar módulos coa implementación de servidores e clientes HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, módulos para a integración. con varios frameworks web, manejadores WebSocket e Ajax, conectores DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motores de modelos, motores CSS, implementacións de algoritmos criptográficos e sistemas de autorización (OAuth), analizadores XML.

Para garantir o procesamento dunha gran cantidade de solicitudes paralelas, Node.js usa un modelo de execución de código asíncrono baseado no manexo de eventos sen bloqueo e na definición de controladores de devolución de chamada. Os métodos compatibles para multiplexar conexións son epoll, kqueue, /dev/poll e select. Para a multiplexación de conexións, úsase a biblioteca libuv, que é un complemento para libev en sistemas Unix e IOCP en Windows. A biblioteca libeio úsase para crear unha agrupación de fíos e c-ares está integrado para realizar consultas DNS en modo sen bloqueo. Todas as chamadas ao sistema que provocan o bloqueo execútanse dentro do grupo de fíos e despois, como os controladores de sinal, transfiren o resultado do seu traballo de volta a través dunha canalización sen nome (tubo). A execución de código JavaScript proporciónase mediante o uso do motor V8 desenvolvido por Google (ademais, Microsoft está a desenvolver unha versión de Node.js co motor Chakra-Core).

No seu núcleo, Node.js é similar aos marcos Perl AnyEvent, Ruby Event Machine, Python Twisted e a implementación de eventos Tcl, pero o bucle de eventos en Node.js está oculto para o desenvolvedor e aseméllase ao manexo de eventos nunha aplicación web en execución. no navegador. Ao escribir aplicacións para node.js, cómpre ter en conta os detalles específicos da programación dirixida por eventos, por exemplo, en lugar de facer "var result = db.query("select..");" coa espera da finalización do traballo e do procesamento posterior dos resultados, Node.js utiliza o principio de execución asíncrona, é dicir. o código transfórmase en "db.query("select..", function (result) {result processing});", no que o control pasará instantáneamente a outro código e o resultado da consulta procesarase a medida que cheguen os datos.

Fonte: opennet.ru

Engadir un comentario