Skip to content
Vitest 2
Main Navigation GuiaAPIConfiguraçãoModo NavegadorAvançado
2.1.9
1.6.1
0.34.6

Português – Brasil

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

Português – Brasil

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

Aparência

Sidebar Navigation

Por que Vitest

Primeiros Passos

Recursos

Workspace

Interface de Linha de Comando

Filtrando Testes

Reporters

Cobertura

Snapshot

Mocking

Testando Tipos

Vitest UI

Testes no Código Fonte

Contexto de Teste

Ambiente de Teste

Expandindo Matchers

Integrações de IDE

Depuração

Comparações com Outros Executores de Teste

Guia de Migração

Erros Comuns

Profiling Test Performance

Otimizando o Desempenho

Nesta página

Análise de Desempenho de Testes ​

Ao executar o Vitest, diversas métricas de tempo dos seus testes são exibidas:

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)
  # Time metrics ^^
  • Transform: Tempo gasto na transformação dos arquivos. Para mais detalhes, consulte Transformação de Arquivos.
  • Setup: Tempo de execução dos arquivos configurados em setupFiles.
  • Collect: Tempo necessário para coletar todos os testes nos arquivos de teste, incluindo o tempo de importação de todas as dependências de arquivo.
  • Tests: Tempo de execução dos casos de teste.
  • Environment: Tempo para configurar o environment de teste, como o JSDOM.
  • Prepare: Tempo que o Vitest leva para preparar o executor de testes.

Executor de Testes ​

Se o tempo de execução dos seus testes estiver elevado, você pode gerar um perfil do executor de testes. As seguintes opções do Node.js são úteis para isso:

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

WARNING

A opção --prof não é compatível com pool: 'threads' devido a limitações de node:worker_threads.

Para aplicar essas opções ao executor de testes do Vitest, defina poolOptions.<pool>.execArgv na sua configuração do 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 gerar um ú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 gerar um único perfil
        singleThread: true,
      },
    },
  },
});

Após a execução dos testes, os arquivos test-runner-profile/*.cpuprofile e test-runner-profile/*.heapprofile serão gerados. Para instruções sobre como analisar esses arquivos, consulte Inspecionando Registros de Perfil.

Um exemplo prático pode ser encontrado em Profiling | Examples.

Thread Principal ​

A análise de desempenho da thread principal é útil para depurar o uso do Vite pelo Vitest e os arquivos globalSetup. É também onde seus plugins do Vite são executados.

TIP

Para mais dicas sobre perfilamento específico do Vite, consulte Performance | Vite.

Recomendamos vite-plugin-inspect para perfilar o desempenho dos seus plugins Vite.

Para realizar essa análise, você precisará passar argumentos para o processo Node que executa o Vitest:

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

Após a execução dos testes, um arquivo main-profile/*.cpuprofile será gerado. Para instruções sobre como analisar esse arquivo, consulte Inspecionando Registros de Perfil.

Transformação de Arquivos ​

Quando o tempo de transformação e coleta dos seus testes estiver alto, você pode usar a variável de ambiente DEBUG=vite-node:* para visualizar quais arquivos são transformados e executados pelo 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álise de desempenho é eficaz para identificar transformações desnecessárias causadas por barrel files. Se esses logs contiverem arquivos que não deveriam ser carregados durante a execução do seu teste, é provável que você tenha barrel files importando arquivos desnecessariamente.

Você também pode usar a Vitest UI para diagnosticar lentidões causadas por barrel files. O exemplo abaixo demonstra como a importação direta de arquivos, sem o uso de barrel files, pode reduzir em aproximadamente 85% a quantidade de arquivos transformados.

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- Arquivo a ser testado
│       ├── 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 demonstrando problemas com barrel file

Para analisar como os arquivos são transformados, você pode usar a variável de ambiente VITE_NODE_DEBUG_DUMP para salvar os arquivos transformados no sistema de arquivos:

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

Inspecionando Registros de Perfil ​

Você pode inspecionar o conteúdo dos arquivos *.cpuprofile e *.heapprofile utilizando diversas ferramentas. Veja a lista abaixo para exemplos:

  • 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
AnteriorErros Comuns
PróximoOtimizando o Desempenho

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors

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

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors