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 LTS
o Maintenance 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: setTimeout
, setImmediate
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
setImmediate
(línea 3) cumple la promesa de inmediato.
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
setInterval
(línea 6) devuelve un iterador asíncrono que genera valores en un intervalo de milisegundos retrasados.
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.