Skip to content
Vitest 2
Main Navigation GuíaAPIConfiguraciónModo NavegadorAvanzado
2.1.9
1.6.1
0.34.6

Español

English
简体中文
繁體中文
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Español

English
简体中文
繁體中文
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Apariencia

Sidebar Navigation

Por qué Vitest

Empezando

Características

Área de Trabajo

Interfaz de Línea de Comandos

Filtrado de Pruebas

Informes

Cobertura

Capturas instantáneas

Mocking

Pruebas de Tipos

Interfaz de Usuario de Vitest

Pruebas en el código fuente

Contexto de prueba

Entorno de Pruebas

Extender Matchers

Integración con IDEs

Depuración

Comparaciones con otros Ejecutores de Pruebas

Guía de Migración

Errores frecuentes

Profiling Test Performance

Mejora del rendimiento

En esta página

Análisis de rendimiento de pruebas ​

Cuando ejecutas Vitest, te proporciona varias métricas de tiempo de tus pruebas:

bash
RUN  v2.1.1 /x/vitest/examples/profiling

✓ test/prime-number.test.ts (1) 4517ms
  ✓ generate prime number 4517ms

Test Files  1 passed (1)
     Tests  1 passed (1)
  Start at  09:32:53
  Duration  4.80s (transform 44ms, setup 0ms, collect 35ms, tests 4.52s, environment 0ms, prepare 81ms)
  # Métricas de tiempo ^^
  • Transform: Tiempo dedicado a transformar los archivos. Consulta Transformación de archivos.
  • Setup: Tiempo dedicado a ejecutar los archivos setupFiles.
  • Collect: Tiempo dedicado a recopilar todas las pruebas de los archivos de prueba. Esto incluye el tiempo que tardó en importar todas las dependencias de los archivos.
  • Tests: Tiempo dedicado a ejecutar los casos de prueba.
  • Environment: Tiempo dedicado a la configuración del environment de prueba, por ejemplo, JSDOM.
  • Prepare: Tiempo que Vitest emplea en preparar el ejecutor de pruebas.

Ejecutor de pruebas ​

Si el tiempo de ejecución de tus pruebas es elevado, puedes generar un perfil del ejecutor de pruebas. Consulta la documentación de NodeJS para las siguientes opciones:

  • --cpu-prof
  • --heap-prof
  • --prof

WARNING

La opción --prof no funciona con pool: 'threads' debido a las limitaciones de node:worker_threads.

Para pasar estas opciones al ejecutor de pruebas de Vitest, define poolOptions.<pool>.execArgv en tu configuración de Vitest:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    pool: 'forks',
    poolOptions: {
      forks: {
        execArgv: [
          '--cpu-prof',
          '--cpu-prof-dir=test-runner-profile',
          '--heap-prof',
          '--heap-prof-dir=test-runner-profile',
        ],

        // Para generar un único perfil
        singleFork: true,
      },
    },
  },
});
ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    pool: 'threads',
    poolOptions: {
      threads: {
        execArgv: [
          '--cpu-prof',
          '--cpu-prof-dir=test-runner-profile',
          '--heap-prof',
          '--heap-prof-dir=test-runner-profile',
        ],

        // Para generar un único perfil
        singleThread: true,
      },
    },
  },
});

Después de que se hayan ejecutado las pruebas, se generarán los archivos test-runner-profile/*.cpuprofile y test-runner-profile/*.heapprofile. Consulta Inspección de registros de perfilado para obtener instrucciones sobre cómo analizar estos archivos.

Consulta Profiling | Examples para ver un ejemplo.

Hilo principal ​

El análisis de rendimiento del hilo principal es útil para depurar el uso de Vite en Vitest y los archivos globalSetup. Aquí también se ejecutan tus plugins de Vite.

TIP

Consulta Performance | Vite para obtener más consejos sobre el perfilado específico de Vite.

Recomendamos vite-plugin-inspect para analizar el rendimiento de tu plugin de Vite.

Para ello, deberás pasar argumentos al proceso de Node que ejecuta Vitest.

bash
$ node --cpu-prof --cpu-prof-dir=main-profile ./node_modules/vitest/vitest.mjs --run
#      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                  ^^^^^
#               Argumentos de NodeJS                                           Argumentos de Vitest

Después de que se hayan ejecutado las pruebas, se generará un archivo main-profile/*.cpuprofile. Consulta Inspección de registros de perfilado para obtener instrucciones sobre cómo analizar estos archivos.

Transformación de archivos ​

Si el tiempo de transformación y recopilación de tus pruebas es elevado, puedes usar la variable de entorno DEBUG=vite-node:* para ver qué archivos están siendo transformados y ejecutados por vite-node.

bash
$ DEBUG=vite-node:* vitest --run

 RUN  v2.1.1 /x/vitest/examples/profiling

  vite-node:server:request /x/vitest/examples/profiling/global-setup.ts +0ms
  vite-node:client:execute /x/vitest/examples/profiling/global-setup.ts +0ms
  vite-node:server:request /x/vitest/examples/profiling/test/prime-number.test.ts +45ms
  vite-node:client:execute /x/vitest/examples/profiling/test/prime-number.test.ts +26ms
  vite-node:server:request /src/prime-number.ts +9ms
  vite-node:client:execute /x/vitest/examples/profiling/src/prime-number.ts +9ms
  vite-node:server:request /src/unnecessary-file.ts +6ms
  vite-node:client:execute /x/vitest/examples/profiling/src/unnecessary-file.ts +4ms
...

Este método de análisis de rendimiento es útil para identificar transformaciones innecesarias causadas por archivos barril. Si estos registros contienen archivos que no deberían cargarse cuando se ejecuta tu prueba, es posible que tengas archivos barril que están importando dependencias innecesariamente.

También puedes usar Vitest UI para solucionar la lentitud causada por archivos barril. El siguiente ejemplo muestra cómo la importación directa de archivos, sin un archivo barril, reduce en aproximadamente un 85% la cantidad de archivos transformados.

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- Archivo a probar
│       ├── index.ts
│       ├── location.ts
│       ├── math.ts
│       ├── time.ts
│       └── users.ts
├── test
│   └── formatters.test.ts
└── vitest.config.ts
ts
import { expect, test } from 'vitest';
import { formatter } from '../src/utils'; 
import { formatter } from '../src/utils/formatters'; 

test('formatter works', () => {
  expect(formatter).not.toThrow();
});
Vitest UI demostrando problemas con archivos barril

Para ver cómo se transforman los archivos, puedes usar la variable de entorno VITE_NODE_DEBUG_DUMP para escribir los archivos transformados en el sistema de archivos:

bash
$ VITE_NODE_DEBUG_DUMP=true vitest --run

[vite-node] [debug] dump modules to /x/examples/profiling/.vite-node/dump

 RUN  v2.1.1 /x/vitest/examples/profiling
...

$ ls .vite-node/dump/
_x_examples_profiling_global-setup_ts-1292904907.js
_x_examples_profiling_test_prime-number_test_ts-1413378098.js
_src_prime-number_ts-525172412.js

Inspección de registros de perfilado ​

Puedes analizar el contenido de *.cpuprofile y *.heapprofile con varias herramientas. Consulta la lista a continuación para ver ejemplos.

  • Speedscope
  • Performance Profiling JavaScript in Visual Studio Code
  • Profile Node.js performance with the Performance panel | developer.chrome.com
  • Memory panel overview | developer.chrome.com
Pager
AnteriorErrores frecuentes
SiguienteMejora del rendimiento

Publicado bajo la licencia MIT.

Copyright (c) 2024 Mithril Contributors

https://v2.vitest.dev/guide/profiling-test-performance

Publicado bajo la licencia MIT.

Copyright (c) 2024 Mithril Contributors