Node.js 16: Un vistazo de sus características

node.js 16

Un vistazo rápido a las características de Node.js 16

Detalles de las características nuevas de Node.js 16, que incluyen la API de promesas de temporizadores estables y las características del motor V8 JavaScript 9.0


La versión principal de Node.js se actualiza cada seis meses. La nueva versión se convierte en la versión actual durante seis meses, lo que da a los autores de la biblioteca tiempo para agregar soporte para ellos. Después de seis meses, las versiones impares, como 15, dejan de ser compatibles y las versiones pares, como 16, pasan al estado Active LTS (soporte a largo plazo) y están listas para uso general. El lanzamiento de LTS generalmente garantiza que los errores críticos se solucionarán durante un total de 30 meses. Las aplicaciones de producción solo deben usar versiones Active LTSMaintenance LTS.

Node.js 16 se lanzó el 20 de abril de 2021. Su estado actual es Active LTS. Viene con una serie de características principales:

  • Temporizadores estables promete API
  • El motor JavaScript V8 se actualiza a V8 9.0
  • Actualizaciones de la cadena de herramientas y el compilador

Exploremos qué son y cómo usarlos.


Utilice NVM para explorar el nodo

En un artículo anterior, proporcionamos instrucciones sobre el uso de NVM (Node Version Manager) para administrar las versiones de Node.js y NPM.

Ejecute el comando para instalar el nodo 16.0.0:

% nvm install 16.0.0
Downloading and installing node v16.0.0...
Downloading https://nodejs.org/dist/v16.0.0/node-v16.0.0-darwin-x64.tar.xz...
####################################################################################################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!

En cualquier ventana, ejecute el comando para usar el nodo 16:

% nvm use 16
Now using node v16.0.0 (npm v7.10.0)

Ahora estamos listos para explorar:

% node --version
v16.0.0

Promesas de temporizadores estables de API

La API de promesas de temporizadores proporciona un conjunto de funciones de temporizador que devuelven objetos de promesa. Estas funciones se agregan en Node.js 15 como una característica experimental y se convierten en características estables en esta versión.

La API de promesas de temporizadores incluye 3 API: setTimeoutsetImmediate ysetInterval.

setTimeout

setTimeout (línea 3) retrasa varios milisegundos antes de cumplir la promesa.

import { setTimeout } from 'timers/promises';
console.log('setTimeout start time:', Date.now());
const time = await setTimeout(2000, Date.now());
console.log('setTimeout execute time:', time);
console.log('setTimeout end time:', Date.now());

Hemos explicado que el módulo ES usa la extensión .mjs. Ejecute el código:

% node timers.mjs
setTimeout start time: 1640376095501
setTimeout execute time: 1640376095507
setTimeout end time: 1640376097510

La promesa se cumple 2 segundos más tarde como se esperaba, aunque la promesa en sí se ejecuta de inmediato.

setImmediate

import { setImmediate } from 'timers/promises';
console.log('setImmediate start time:', Date.now());
const time = await setImmediate(Date.now());
console.log('setImmediate execute time:', time);
console.log('setImmediate end time:', Date.now());

Ejecuta el código:

% node timers.mjs
setImmediate start time: 1640377036883
setImmediate execute time: 1640377036889
setImmediate end time: 1640377036890

Es obvio que la promesa se cumple de inmediato.

setInterval

import { setInterval } from 'timers/promises';

let count = 0;

console.log('setInterval start time:', Date.now());
for await (const startTime of setInterval(100, Date.now())) {
  const now = Date.now();
  console.log('count =', count++, now);
  if (now - startTime > 1000) break;
}
console.log('setInterval end time:', Date.now());

Ejecuta el código:

% node timers.mjs
setInterval start time: 1640394433050
count = 0 1640394433159
count = 1 1640394433263
count = 2 1640394433365
count = 3 1640394433471
count = 4 1640394433573
count = 5 1640394433678
count = 6 1640394433781
count = 7 1640394433885
count = 8 1640394433990
count = 9 1640394434091
setInterval end time: 1640394434092

El bucle for se ejecutó 10 veces. Cada vez, incluida la primera, se retrasa 100 ms.


El motor de JavaScript V8 se actualiza a V8 9.0

En Node.js 16, el motor JavaScript V8 se actualiza a V8 9.0, desde la versión 8.6 en Node.js 15. Las siguientes son características principales:

  • Índices de coincidencia de expresiones regulares
  • Acceso a superpropiedades más rápido
  • for (async of no permitido

Índices de coincidencia de expresiones regulares

Los índices de coincidencia de expresiones regulares son una nueva característica de ES2022. Proporciona los índices de inicio y finalización de la cadena capturada de la expresión regular.

const matched = /(a+)(b+)/d.exec('aaaabbbb');
console.log(matched.indices);

La expresión regular usa d como bandera para generar índices para coincidencias de subcadenas (línea 1).

Imprime los índices de generación de la siguiente manera:

% node matched.js
[ [ 0, 8 ], [ 0, 4 ], [ 4, 8 ], groups: undefined ]

[0, 8] es una coincidencia, [0, 4] es el primer grupo de captura y [4, 8] es el segundo grupo de captura.

Acceso a superpropiedades más rápido

El acceso a super propiedades, como super.something, se ha optimizado mediante el uso del sistema de caché en línea y la generación de código optimizada en TurboFan. Con estos cambios, el acceso a las super propiedades está ahora más cerca de estar a la par con el acceso regular a la propiedad.

`for (async of` no permitido

La secuencia del token para (async of es ambigua. Puede ser el prefijo para for (async of => {};;)  o for (async of foo). Por lo tanto, no está permitido.

Mientras tanto, for await (async of todavía está permitido, ya que no hay for (await (;;) y por lo tanto, no hay ambigüedad.


Actualizaciones de la cadena de herramientas y el compilador

Node.js normalmente proporciona binarios prediseñados para varias plataformas diferentes. Hay algunas adiciones de Node.js 16:

  • Los binarios prediseñados para Apple Silicon.
  • El instalador de macOS (.pkg) se envía como un binario “fat” (multi-arquitectura).
  • Se proporcionan tarballs separados para las arquitecturas Intel (darwin-x64) y ARM (darwin-arm64).

Conclusión

Node.js 16 tiene una serie de nuevas características y mejoras. Su estado actual es LTS activo.

Node.js 17 se lanzó el 19 de octubre de 2021. En uno de mis próximos artículo exploraremos Node.js 17.

Si desea consultar versiones anteriores, consulte Novedades de Node.js 15.

Gracias por leer. Espero que esto haya sido de ayuda. Si está interesado, consulte mis otros artículos.

Recent Post