Skip to content
Vitest 2
Main Navigation GuidaAPIConfigurazioneModalità BrowserAvanzato
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

Perché Vitest

Introduzione

Funzionalità

Workspace

Interfaccia a riga di comando

Filtro dei test

Reporter

Coverage

Snapshot

Mocking

Test dei Tipi

Interfaccia Utente di Vitest

Test nel codice sorgente

Contesto del Test

Ambienti di Test

Estensione dei Matchers

Integrazione con gli IDE

Debugging

Confronti con altri Test Runner

Guida alla Migrazione

Errori Frequenti

Profiling Test Performance

Ottimizzare le Prestazioni

In questa pagina

Analisi delle prestazioni dei test ​

Quando esegui Vitest, vengono visualizzate 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)
  # Metriche di tempo ^^
  • Transform: Tempo impiegato per la trasformazione dei file. Vedi Trasformazione file.
  • Setup: Tempo di esecuzione dei file configurati in setupFiles.
  • Collect: Tempo necessario per la raccolta di tutti i test all'interno dei file di test. Questo include il tempo richiesto per importare tutte le dipendenze dei file.
  • Tests: Tempo di esecuzione effettivo dei casi di test.
  • Environment: Tempo di configurazione dell'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 Node.js per le seguenti opzioni:

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

WARNING

L'opzione --prof non è compatibile 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 tua configurazione 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. Consulta Ispezionare i record di profilazione per le istruzioni su come analizzare questi file.

Vedi Profiling | Examples per un esempio pratico.

Thread principale ​

La profilazione del thread principale è utile per il debug dell'utilizzo di Vite da parte di Vitest e dei file globalSetup. È anche il contesto in cui 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 eseguire questa operazione, è necessario passare gli argomenti al processo Node.js 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. Consulta Ispezionare i record di profilazione per le istruzioni su come analizzare questo file.

Trasformazione file ​

Nei casi in cui 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 è un metodo efficace per identificare trasformazioni non necessarie causate dai barrel files. Se questi log contengono file che non dovrebbero essere caricati durante l'esecuzione del test, potrebbe indicare la presenza di barrel files che importano file inutilmente.

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

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- File di test
│       ├── 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 usare 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

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 precedenteErrori Frequenti
Pagina successivaOttimizzare le Prestazioni

Rilasciato sotto la licenza MIT.

Copyright (c) 2024 Mithril Contributors

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

Rilasciato sotto la licenza MIT.

Copyright (c) 2024 Mithril Contributors