Skip to content
Vitest 3
Main Navigation Guida & APIConfigurazioneModalità BrowserAPI avanzata
3.2.0
2.1.9
1.6.1
0.34.6

Italiano

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

Italiano

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

Aspetto

Sidebar Navigation

Introduzione

Perché Vitest

Per Iniziare

Caratteristiche

Configurazione di Vitest

API

Riferimento API di test

Funzioni Mock

Vi

expect

expectTypeOf

assert

assertType

Guida

Interfaccia a Riga di Comando

Filtro dei Test

Progetti di Test

Reporter

Copertura

Snapshot

Mocking

Parallelismo

Tipi di Test

Vitest UI

Test nel Codice Sorgente

Contesto di Test

Annotazioni dei Test

Ambiente di Test

Estensione dei Matcher

Integrazioni IDE

Debugging

Errori Comuni

Guida alla Migrazione

Migrazione a Vitest 3.0

Migrazione da Jest

Prestazioni

Profilazione delle prestazioni dei test

Ottimizzare le Prestazioni

Modalità Browser

API Avanzate

Confronto con Altri Test Runner

In questa pagina

Profilazione delle prestazioni dei test ​

Quando esegui Vitest, vengono riportate diverse metriche temporali relative ai tuoi test:

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 impiegato per la trasformazione dei file. Vedi Trasformazione file.
  • Setup: Tempo necessario per eseguire i file specificati in setupFiles.
  • Collect: Tempo impiegato per la raccolta di tutti i test dai file di test. Questo include il tempo necessario per importare tutte le dipendenze dei file.
  • Tests: Tempo impiegato per l'esecuzione effettiva dei casi di test.
  • Environment: Tempo necessario per configurare l'environment di test, ad esempio JSDOM.
  • Prepare: Tempo impiegato da Vitest per preparare il test runner.

Test runner ​

Se il tempo di esecuzione dei test è elevato, è possibile generare un profilo del test runner. Consulta la documentazione di NodeJS per le seguenti opzioni:

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

WARNING

L'opzione --prof non funziona con pool: 'threads' a causa delle limitazioni di node:worker_threads.

Per passare queste opzioni al test runner di Vitest, definisci poolOptions.<pool>.execArgv nella configurazione di 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',
        ],

        // Per generare un singolo profilo
        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',
        ],

        // Per generare un singolo profilo
        singleThread: true,
      },
    },
  },
});

Dopo l'esecuzione dei test, verranno generati i file test-runner-profile/*.cpuprofile e test-runner-profile/*.heapprofile. Vedi Ispezionare i record di profilazione per le istruzioni su come analizzare questi file.

Per un esempio, vedi Profiling | Examples.

Thread principale ​

La profilazione del thread principale è utile per il debug dell'integrazione di Vite in Vitest e dei file globalSetup. È anche qui che vengono eseguiti i plugin Vite.

TIP

Vedi Performance | Vite per ulteriori suggerimenti sulla profilazione specifica di Vite.

Consigliamo vite-plugin-inspect per la profilazione delle prestazioni dei plugin Vite.

Per fare ciò, è necessario passare gli argomenti al processo Node che esegue Vitest.

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

Dopo l'esecuzione dei test, verrà generato un file main-profile/*.cpuprofile. Vedi Ispezionare i record di profilazione per le istruzioni su come analizzare questi file.

Trasformazione file ​

Se il tempo di trasformazione e raccolta dei test è elevato, è possibile utilizzare la variabile d'ambiente DEBUG=vite-node:* per visualizzare quali file vengono trasformati ed eseguiti da 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
...

Questa strategia di profilazione è utile per identificare trasformazioni non necessarie causate dai barrel files. Se questi log contengono file che non dovrebbero essere caricati durante l'esecuzione del test, ciò potrebbe indicare la presenza di barrel files che importano file inutilmente.

È anche possibile utilizzare Vitest UI per il debug della lentezza causata dai barrel files. L'esempio seguente mostra come l'importazione di file senza barrel file riduca la quantità di file trasformati di circa l'85%.

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- File da testare
│       ├── 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 che dimostra problemi con i barrel file

Per vedere come vengono trasformati i file, è possibile utilizzare la variabile d'ambiente VITE_NODE_DEBUG_DUMP per scrivere i file trasformati nel file system:

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

Copertura del codice ​

Se la generazione della copertura del codice è lenta nel tuo progetto, è possibile utilizzare la variabile d'ambiente DEBUG=vitest:coverage per abilitare la registrazione delle prestazioni.

bash
$ DEBUG=vitest:coverage vitest --run --coverage

 RUN  v3.1.1 /x/vitest-example

  vitest:coverage Reading coverage results 2/2
  vitest:coverage Converting 1/2
  vitest:coverage 4 ms /x/src/multiply.ts
  vitest:coverage Converting 2/2
  vitest:coverage 552 ms /x/src/add.ts
  vitest:coverage Uncovered files 1/2
  vitest:coverage File "/x/src/large-file.ts" is taking longer than 3s
  vitest:coverage 3027 ms /x/src/large-file.ts
  vitest:coverage Uncovered files 2/2
  vitest:coverage 4 ms /x/src/untested-file.ts
  vitest:coverage Generate coverage total time 3521 ms

Questo approccio di profilazione è efficace per rilevare file di grandi dimensioni che vengono accidentalmente inclusi dai fornitori di copertura. Ad esempio, se la configurazione include inavvertitamente grandi file Javascript minificati nella copertura del codice, questi appariranno nei log. In questi casi, potrebbe essere opportuno regolare le opzioni coverage.include e coverage.exclude.

Ispezionare i record di profilazione ​

È possibile ispezionare il contenuto dei file *.cpuprofile e *.heapprofile con vari strumenti. Di seguito è riportato un elenco di esempi.

  • 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
Pagina precedenteGuida alla Migrazione
Pagina successivaOttimizzare le Prestazioni

Rilasciato sotto la licenza MIT.

Copyright (c) 2021-Present Vitest Team

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

Rilasciato sotto la licenza MIT.

Copyright (c) 2021-Present Vitest Team