Se ha lanzado Node.js 20, echemos un vistazo a las nuevas funciones de Node.js 20

escrito en frente

Node.js 20 se lanzó el 18 de abril de 2023 y entrará en soporte a largo plazo (también conocido como versión LTS) en octubre de 2023. Podemos descargarlo y experimentarlo aquí: https://nodejs.org/en/download/current/

En Node.js 20, hay muchos cambios nuevos y aspectos destacados, incluido el nuevo modelo de permisos de Node.js, la import.meta.resolveversión síncrona y estable test_runner, el motor V8 actualizado a la versión 11.3, etc.

mejora del rendimiento

Node.js 20 ha optimizado mucho el rendimiento durante el tiempo de ejecución, principalmente incluyendo URLmódulos, fetch()funciones y EventTargetmódulos.

La sobrecarga de inicialización EventTargetse reduce a la mitad y se puede acceder más rápidamente a todos los subsistemas que dependen de este módulo.

Además, V8 Fast API(una API para funciones C de llamadas rápidas, consulte aquí para obtener más detalles ) también se utiliza para mejorar el rendimiento de las API, como URL.canParse()los temporizadores.

Al mismo tiempo, se actualizará Adaa 2.0, que es un C++excelente analizador de URL escrito en , para un mejor rendimiento del análisis de URL.

Finalmente, el equipo de desarrollo también está optimizando el rendimiento de stream, y decodificadores de cadenas a través de la refactorización .URLURLSearchParams

Nuevos cambios y destacados

modelo de permiso

El modelo de permisos de Node.js todavía es una característica experimental y se usa para restringir el acceso a recursos específicos durante la ejecución. En concreto, incluye las siguientes funciones:

  • Uso --allow-fs-ready --allow-fs-writerestricción del acceso al sistema de lectura y escritura de archivos
  • Usar --allow-child-processacceso restringido a child_process
  • Usar --allow-workeracceso restringido a worker_threads
  • --no-addonsEl acceso a complementos nativos está restringido usando

Al introducir --allow-fs-ready --allow-fs-write, los desarrolladores de Node.js tienen más control sobre el acceso al sistema de archivos. Estas características experimentales permiten un control más detallado sobre el acceso al sistema de archivos por parte de los procesos de Node.js.

Para habilitar estas banderas, los desarrolladores pueden usar --experimental-permission, seguido de los permisos requeridos. Por ejemplo, ejecute el siguiente comando para permitir el acceso de lectura y escritura a todo el sistema de archivos:

$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js

Este comando también admite patrones de comodines, por ejemplo, el siguiente comando permite el acceso de lectura a todos los archivos y carpetas /home/en el directorio que comienzan con prueba:test

$ node --experimental-permission --allow-fs-read=/home/test* index.js

Los patrones comodín también se pueden usar para permitir el acceso a varios archivos o carpetas a la vez. Por ejemplo, el siguiente comando permite el acceso de lectura a todos los archivos y carpetas en el directorio /home/ que comienzan con prueba:

$ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js

Cuando el modelo de permisos está habilitado, puede usarlo process.permissionpara verificar los permisos.

process.permission.has("fs.write"); // true
process.permission.has("fs.write", "/home/nodejs/protected-folder"); // true

Documentación detallada: https://nodejs.org/api/permissions.html#process-based-permissions
Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/44004

El cargador ESM está a punto de entrar en la etapa estable

En Node.js, podemos cargar el módulo ESM a través ESM loaderdel enlace del ciclo de vida, que es este formulario. --experimental-loader=./foo.mjsY ahora Node.js 20 admite la ejecución de módulos cargados en un subproceso dedicado aislado del subproceso principal. Esto proporciona un alcance separado para los módulos cargados y garantiza que no haya contaminación cruzada entre los módulos cargados y el código de la aplicación. Además, para ser consistente con el comportamiento del navegador, import.meta.resolve()el valor predeterminado ahora es regresar de forma síncrona.

Estos son ESM loaderlos últimos cambios destacados antes de entrar en la etapa estable. Cuando los cambios anteriores se estabilicen, el funcionario marcará estas funciones como estables. Esto sienta las bases para un uso más amplio de ESM por parte de las aplicaciones de Node.js.

Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/44710

Motor V8 versión 11.3

Node.js 20 actualizó el motor V8 a 11.3 (parte de Chromium 113). El nuevo motor trae las siguientes novedades:

  • Soporte String.prototype.isWellFormedy toWellFormed.
    • isWellFormedSe utiliza para verificar si la cadena es un Unicode legal y toWellFormedconvertirá una cadena a Unicode.
  • Proporciona funciones que mutan Array y TypedArray y devuelven una copia de la matriz mutada.
    • Array.prototypeLas funciones y existentes TypedArray.prototypemodifican directamente la matriz recibida. En su lugar, la nueva función devuelve una copia modificada de la matriz recibida, dejando la matriz original sin cambios. Estas nuevas funciones son útiles en estilos de programación donde los datos son inmutables.
  • ArrayBuffer redimensionable y SharedArrayBuffer ampliable.
  • Las expresiones regulares admiten vbanderas y +extensiones.
    • Este cambio agrega operaciones de configuración en cadenas, literales de cadena y propiedades Unicode a las expresiones regulares. Con estos cambios, los desarrolladores pueden usar expresiones regulares para unir cadenas con caracteres Unicode específicos.
    • Ejemplo: use /[\p{Script_Extensions=Greek}&&\p{Letter}]/vpara hacer coincidir todas las letras griegas.
  • Llamadas de cola de WebAssembly.

Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/47251

El módulo Test Runner ha entrado en la etapa estable

test_runnerEl módulo ha entrado en la etapa estable en Node.js 20. Se utiliza principalmente para escribir y ejecutar archivos de prueba, incluidos:

  • describe// itfunciones testy ganchos para archivos de prueba.
  • datos simulados.
  • Supervisar el modo de cambio de archivo (modo de vigilancia).
  • node --testAdmite la ejecución de varios archivos de prueba en paralelo.

Aquí hay test_runnerun ejemplo de un archivo de prueba utilizado:

import {
    
     test, mock } from "node:test";
import assert from "node:assert";
import fs from "node:fs";

mock.method(fs, "readFile", async () => "Hello ZY");
test("synchronous passing test", async (t) => {
    
    
  // This test passes because it does not throw an exception.
  assert.strictEqual(await fs.readFile("zy.txt"), "Hello ZY");
});

Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/46983

El blob debe pasarse al preparar una sola aplicación ejecutable

Las aplicaciones ejecutables únicas (SEA) se refieren a programas que se pueden ejecutar directamente en el sistema operativo sin depender del entorno Node.js. Por lo general, los desarrolladores elegirán pkgy boxednodeotras soluciones comunitarias para empaquetar una aplicación Node.js en un archivo ejecutable. Node.js estableció un equipo relacionado en 2022 para proporcionar una solución de generación SEA oficial. A partir de ahora, las funciones relacionadas con SEA siguen siendo funciones experimentales .

En Node.js 20, la creación de una sola aplicación ejecutable ahora requiere inyectar un blob preparado en Node.js desde una configuración JSON en lugar de archivos JS sin procesar, un cambio que permite incorporar múltiples recursos compartidos en SEA.

Por ejemplo:

mar-config.json

{
    
    
  "main": "hello.js",
  "output": "sea-prep.blob"
}

Esto escribirá el blob en un archivo sea-prep.blob.

$ node --experimental-sea-config sea-config.json

De esta manera, este blob se puede inyectar en el binario.

Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/47125

API criptográfica web

En Node.js 20, los parámetros de función de Web Crypto API se modifican de acuerdo con el estándar WebIDL, para que estén alineados con otras implementaciones de Web Crypto API, como los navegadores. Esto mejora aún más la interoperabilidad de Web Crypto API de Node.js con otras implementaciones.

Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/46067

Soporte ARM64 Windows

Node.js es compatible con tantas plataformas y arquitecturas que los desarrolladores esperan que funcione en cualquier entorno. ¡La buena noticia es que Node.js 20 ahora es compatible con Windows ARM64!

Relaciones públicas relacionadas: https://github.com/nodejs/node/pull/47233

Nuevos desarrollos en WASI (Web Assembly System Interface)

Aunque las funciones relacionadas con WASI aún son experimentales en Node.js , en Node.js 20, ya no necesitamos usar las opciones de línea de comandos para habilitar WASI. Además, new WASI()al instanciar un objeto WASI, versionse debe pasar un parámetro de forma predeterminada para aclarar su versión correspondiente.

Actualizar Node.js

Node.js 14 llegará al final de su vida útil en abril de 2023 y Node.js 16 (LTS) llegará al final de su vida útil en septiembre de 2023.

¡Así que es hora de comenzar a pensar en actualizar Node.js a Node.js 18 (LTS) o Node.js 20 (que pronto será LTS)!

Supongo que te gusta

Origin blog.csdn.net/u011748319/article/details/130273671
Recomendado
Clasificación