Skip to content
Vitest 2
Main Navigation GuideAPIConfigurationMode NavigateurAvancé
2.1.9
1.6.1
0.34.6

Français

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

Français

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

Apparence

Sidebar Navigation

Pourquoi Vitest

Premiers pas

Fonctionnalités

Espace de travail

Interface de ligne de commande

Filtrage des tests

Reporters

Couverture

Instantané (Snapshot)

Simulations

Tests de Type

Interface utilisateur de Vitest

Tests intégrés au code source

Contexte de Test

Environnement de test

Extension des vérificateurs (Matchers)

Intégrations pour IDE

Débogage

Comparaison avec d'autres outils de test

Guide de migration

Erreurs courantes

Profiling Test Performance

Améliorer les performances

Sur cette page

Profilage des performances des tests ​

Lors de l'exécution de Vitest, plusieurs métriques de temps sont fournies pour vos tests :

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étriques de temps
  • Transform : Durée de la transformation des fichiers. Voir Transformation de fichiers.
  • Setup : Temps d'exécution des fichiers spécifiés dans setupFiles.
  • Collect : Temps nécessaire pour collecter tous les tests dans les fichiers de test, incluant l'importation de toutes les dépendances de fichiers.
  • Tests : Temps d'exécution des cas de test.
  • Environment : Temps de configuration de l'environnement de test, par exemple JSDOM.
  • Prepare : Temps utilisé par Vitest pour préparer le lanceur de tests.

Lanceur de tests ​

Si le temps d'exécution de vos tests est élevé, vous pouvez générer un profil du lanceur de tests. Consultez la documentation de NodeJS concernant les options suivantes :

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

WARNING

L'option --prof ne fonctionne pas avec pool: 'threads' en raison des limitations de node:worker_threads.

Pour transmettre ces options au lanceur de tests de Vitest, définissez poolOptions.<pool>.execArgv dans votre configuration 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',
        ],

        // Pour générer un profil unique
        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',
        ],

        // Pour générer un profil unique
        singleThread: true,
      },
    },
  },
});

Après l'exécution des tests, des fichiers test-runner-profile/*.cpuprofile et test-runner-profile/*.heapprofile seront générés. Voir Inspection des enregistrements de profilage pour les instructions sur l'analyse de ces fichiers.

Voir Profiling | Examples pour un exemple complet.

Thread principal ​

Le profilage du thread principal est utile pour déboguer la manière dont Vitest utilise Vite et les fichiers globalSetup. C'est également là que vos plugins Vite s'exécutent.

TIP

Voir Performance | Vite pour des conseils supplémentaires sur le profilage spécifique à Vite.

Nous recommandons vite-plugin-inspect pour analyser les performances de vos plugins Vite.

Pour ce faire, vous devrez transmettre des arguments au processus Node qui exécute Vitest.

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

Après l'exécution des tests, un fichier main-profile/*.cpuprofile sera généré. Voir Inspection des enregistrements de profilage pour les instructions sur l'analyse de ces fichiers.

Transformation de fichiers ​

Si le temps de transformation et de collecte de vos tests est élevé, vous pouvez utiliser la variable d'environnement DEBUG=vite-node:* pour voir quels fichiers sont transformés et exécutés par 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
...

Cette stratégie de profilage est un excellent moyen d'identifier les transformations inutiles causées par les fichiers « barrel ». Si ces journaux contiennent des fichiers qui ne devraient pas être chargés lors de l'exécution de votre test, il est possible que vous ayez des fichiers « barrel » qui importent des dépendances inutilement.

Vous pouvez également utiliser l'interface utilisateur de Vitest pour diagnostiquer les ralentissements causés par les fichiers « barrel ». L'exemple ci-dessous montre comment l'importation directe de fichiers, sans passer par un fichier « barrel », réduit la quantité de fichiers transformés d'environ 85 %.

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- Fichier à tester
│       ├── 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();
});
L'interface utilisateur de Vitest illustrant les problèmes liés aux fichiers barrel

Pour voir comment les fichiers sont transformés, vous pouvez utiliser la variable d'environnement VITE_NODE_DEBUG_DUMP afin d'enregistrer les fichiers transformés sur le système de fichiers :

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

Inspection des enregistrements de profilage ​

Vous pouvez inspecter le contenu des fichiers *.cpuprofile et *.heapprofile à l'aide de divers outils. Voici quelques exemples :

  • 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
Page précédenteErreurs courantes
Page suivanteAméliorer les performances

Publié sous la licence MIT.

Copyright (c) 2024 Mithril Contributors

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

Publié sous la licence MIT.

Copyright (c) 2024 Mithril Contributors