Node.js proporciona herramientas potentes para medir y optimizar el rendimiento de tus aplicaciones. Una de estas herramientas es la Performance API, que permite a los desarrolladores capturar marcas de tiempo de alta resolución y varias métricas de rendimiento. Esta guía te presentará los componentes clave de la Node.js Performance API y cómo usarlos de manera efectiva.
Por qué el rendimiento importa en Node.js
Node.js destaca en su arquitectura asíncrona basada en eventos, perfectamente adecuada para tareas vinculadas a E/S. Sin embargo, incluso en este entorno sin bloqueo, el rendimiento sigue siendo primordial. Las aplicaciones lentas conducen a usuarios frustrados y dificultan la escalabilidad. Identificar los cuellos de botella y optimizar el código se vuelve esencial para una experiencia de usuario perfecta.
¿Interesado en aumentar el tiempo de respuesta de tu API? El siguiente artículo ofrece una guía paso a paso sobre cómo aumentar el tiempo de respuesta de tu API.

¿Por qué usar la Node.js Performance API?
- Identificar cuellos de botella de rendimiento: Los cuellos de botella de rendimiento pueden degradar significativamente la experiencia del usuario. Usando la Performance API, los desarrolladores pueden señalar los momentos exactos en los que se producen retrasos, ya sea en la ejecución de funciones, la carga de recursos o el manejo de solicitudes HTTP. Esta precisión permite optimizaciones específicas.
- Optimizar el uso de recursos: Monitorear el rendimiento ayuda a comprender cómo se están utilizando los recursos como la CPU y la memoria. Al identificar el uso ineficiente de los recursos, los desarrolladores pueden optimizar su código para que sea más eficiente, reduciendo los costos y mejorando la escalabilidad.
- Mejorar la experiencia del usuario: Las aplicaciones que responden rápidamente brindan una mejor experiencia de usuario. La Performance API ayuda a medir métricas clave como el Tiempo hasta el primer byte (TTFB) y la Primera representación de contenido (FCP), lo que permite a los desarrolladores realizar mejoras que conducen a tiempos de carga más rápidos e interacciones más fluidas.
- Mejorar la estabilidad de la aplicación: El monitoreo continuo del rendimiento ayuda a detectar anomalías y posibles problemas antes de que se vuelvan críticos. Este enfoque proactivo garantiza un mayor tiempo de actividad y confiabilidad de la aplicación.
Introducción a la Node.js Performance API
La Performance API, accesible a través del módulo perf_hooks
, equipa a los desarrolladores de Node.js con un conjunto de herramientas completo para medir y analizar el rendimiento de la aplicación. Ofrece una ventaja significativa sobre los métodos tradicionales como Date.now()
, proporcionando una sincronización de alta resolución y un enfoque más estructurado para la evaluación del rendimiento. En el método Date.now()
, verás algo como;
const startTime = Date.now();
// call a function to perform a task()
console.log(`Task duration: ${Date.now() - startTime} milliseconds`);
La función Date.now() funciona bien, pero de nuevo, aunque aparentemente sencillo, este método puede no ser fiable porque los cambios en el reloj del sistema pueden desviar las mediciones.
Aquí es donde entra en escena la Node.js Performance API. Queremos poder medir completamente el uso del tiempo de nuestra aplicación y que no nos molesten cosas como el reloj del sistema, ¿verdad?
La Node.js Performance API se basa en varios métodos y clases centrales proporcionados por el módulo perf_hooks
. Estos incluyen:
Cada una de estas herramientas tiene un propósito distinto en la captura y el análisis de las métricas de rendimiento.
Usando performance.now()
El método performance.now()
devuelve una marca de tiempo de alta resolución en milisegundos. Esto es útil para medir intervalos dentro de tu aplicación con mayor precisión que Date.now()
.
Para obtener la duración de una tarea, agrega el método performance.now() al principio y al final de la operación que deseas medir de la siguiente manera;
const { performance } = require('node:perf_hooks');
const start = performance.now();
// Perform some operations
const end = performance.now();
console.log(`Time taken: ${end - start} ms`);
En primer lugar, importamos el rendimiento de los módulos de nodo, y luego creamos constantes de inicio y fin y les asignamos los métodos performance.now para obtener el tiempo preciso de la operación.
La salida del código anterior debería verse así;
Time taken: 1253.**** ms.
Usando performance.mark()
El método performance.mark()
en Node.js te permite crear marcas de tiempo con nombre (o marcas) en puntos específicos de tu código. Estas marcas te ayudan a medir el tiempo que transcurre entre diferentes partes de tu aplicación, lo que te da información sobre los cuellos de botella del rendimiento.
const { performance } = require('node:perf_hooks');
performance.mark('A');
// Some operations
performance.mark('B');
En este ejemplo, performance.mark('A') y performance.mark('B') crean dos marcas etiquetadas como 'A' y 'B', respectivamente.
Las marcas también pueden incluir detalles adicionales, que pueden ser útiles para la depuración o un análisis más profundo.performance.mark('A', { detail: 'Start of operation' }); performance.mark('B', { detail: 'End of operation' });
Aquí, la propiedad detail
proporciona información adicional sobre lo que representa cada marca.
Una vez que hayas creado las marcas, puedes medir la duración entre ellas usando performance.measure()
.
Usando performance.measure()
performance.measure()
es una función dentro de la Performance API de Node.js que calcula específicamente la duración entre dos puntos marcados en la línea de tiempo de ejecución de tu aplicación. Esencialmente, crea una entrada de medición y almacena el tiempo transcurrido para su posterior recuperación y análisis.
Recuerda que en la sección performance.mark()
, creamos dos marcas: A
& B
. En esta sección, las probaremos y veremos cómo funciona performance.mark()
con performance.measure()
.
performance.measure('A to B', 'A', 'B');
const measures = performance.getEntriesByType('measure');
measures.forEach(measure => {
console.log(`${measure.name}: ${measure.duration}ms`);
});
Esto creará una medida llamada 'A to B', que calcula el tiempo transcurrido entre las marcas 'A' y 'B'.
Cuando ejecutes el código anterior, la salida mostrará la duración entre las dos marcas 'A' y 'B'. Aquí hay un ejemplo de lo que la consola podría imprimir algo como:
A to B: 12.345ms
Esta salida indica que las operaciones entre las marcas 'A' y 'B' tardaron aproximadamente 12.345 milisegundos en completarse.
Usando PerformanceObserver
La interfaz PerformanceObserver
en Node.js permite a los desarrolladores observar y manejar asíncronamente las entradas de rendimiento, como marcas, medidas y entradas de tiempo de recursos. Es particularmente útil para monitorear y reaccionar a los datos de rendimiento a medida que se recopilan, lo que la convierte en una herramienta esencial para el análisis y la optimización del rendimiento en tiempo real.
Para usar PerformanceObserver
, necesitas crear una instancia de ella y definir una función de devolución de llamada que maneje las entradas de rendimiento. Aquí hay una configuración básica:
const { PerformanceObserver, performance } = require('node:perf_hooks');
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(entry);
});
});
observer.observe({ entryTypes: ['mark', 'measure'] });
En este ejemplo:
- Importando
PerformanceObserver
yperformance
: Los objetosPerformanceObserver
yperformance
se importan desde el móduloperf_hooks
. - Creando un observador: Se crea una instancia de
PerformanceObserver
con una función de devolución de llamada. Esta función se llama cada vez que se registran nuevas entradas de rendimiento. - Observando tipos de entrada: Se llama al método
observer.observe
con un objeto que especifica los tipos de entradas a observar (mark
ymeasure
en este caso).
Casos de uso prácticos para PerformanceObserver
1. Monitoreo del rendimiento en tiempo real:
PerformanceObserver
te permite monitorear continuamente el rendimiento de la aplicación, proporcionando retroalimentación inmediata sobre los problemas de rendimiento. Esto es particularmente útil en entornos de producción donde los datos de rendimiento en tiempo real son críticos.
2. Analizando la carga de recursos:
- Al observar las entradas de tiempo de recursos, los desarrolladores pueden analizar cómo se cargan varios recursos (como scripts, hojas de estilo e imágenes), lo que ayuda a optimizar los tiempos de carga.
3. Depuración y creación de perfiles:
- Durante el desarrollo,
PerformanceObserver
se puede usar para crear perfiles de partes específicas del código, identificando funciones lentas y posibles cuellos de botella.
4. Métricas de rendimiento personalizadas:
- Los desarrolladores pueden crear métricas de rendimiento personalizadas marcando y midiendo puntos importantes en la aplicación, lo que permite un análisis de rendimiento más granular adaptado a las necesidades específicas de la aplicación.
Pruebas de aplicaciones en Node.js
Hasta ahora, hemos aprendido sobre la Node.js Performance API, por qué es importante, cómo funciona y cómo difiere de la función predeterminada Date.now()
.
Sin embargo, si estás construyendo una aplicación, querrás concentrarte en construir tu aplicación y dejar las pruebas a otros servicios. Bueno, gracias a Apidog, puedes probar tus APIs y aplicaciones.

Apidog es una herramienta poderosa diseñada específicamente para pruebas de API, incluidas las pruebas de rendimiento. Ofrece soluciones integrales para crear, administrar y probar APIs. Apidog te permite simular comportamientos de API, definir casos de prueba y generar informes detallados. Con su interfaz intuitiva, puedes configurar fácilmente pruebas de rendimiento, analizar los tiempos de respuesta e identificar los cuellos de botella del rendimiento.

Conclusión
La Node.js Performance API, que incluye herramientas como performance.mark()
, performance.measure()
y PerformanceObserver
, proporciona a los desarrolladores capacidades poderosas para monitorear y optimizar el rendimiento de la aplicación. Al aprovechar estas herramientas, puedes obtener información precisa sobre las características de rendimiento de tus aplicaciones Node.js, identificar cuellos de botella e implementar optimizaciones específicas para mejorar la eficiencia y la experiencia del usuario.
Más allá de la Performance API, emplear las mejores prácticas de APIs/Aplicaciones, y pruebas de carga y monitoreo robustos pueden aumentar significativamente el rendimiento general de tus aplicaciones. Estos esfuerzos combinados aseguran que tus aplicaciones Node.js se ejecuten sin problemas, escalen de manera efectiva y brinden una experiencia de usuario superior, manteniendo así una ventaja competitiva en el mercado.