Skip to content
Vitest 3
Main Navigation Leitfaden & APIKonfigurationBrowser-ModusFortgeschritten API
3.2.0
2.1.9
1.6.1
0.34.6

Deutsch

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

Deutsch

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

Aussehen

Sidebar Navigation

Einführung

Warum Vitest

Erste Schritte

Funktionen

Vitest konfigurieren

API

Test-API-Referenz

Mock-Funktionen

Vi

expect

expectTypeOf

assert

assertType

Leitfaden

Befehlszeilenschnittstelle

Testfilterung

Testprojekte

Reporter

Code-Abdeckung

Snapshot

Mocking

Parallelisierung

Typüberprüfungen

Vitest UI

Tests im Quellcode

Test-Kontext

Test-Annotationen

Testumgebung

Matcher erweitern

IDE-Integrationen

Debugging

Häufige Fehler

Migrationsleitfaden

Migration zu Vitest 3.0

Migration von Jest

Performance

Leistungsprofilierung von Tests

Leistung verbessern

Browser-Modus

Erweiterte API

Vergleiche mit anderen Test-Runnern

Auf dieser Seite

Leistungsprofilierung von Tests ​

Wenn Sie Vitest ausführen, werden mehrere Zeitmetriken Ihrer Tests gemeldet:

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: Die Zeit, die für die Transformation der Dateien aufgewendet wurde. Siehe Dateitransformation.
  • Setup: Die Zeit, die für die Ausführung der setupFiles-Dateien aufgewendet wurde.
  • Collect: Die Zeit, die für das Sammeln aller Tests in den Testdateien aufgewendet wurde. Dies beinhaltet die Zeit, die für den Import aller Dateabhängigkeiten benötigt wurde.
  • Tests: Die Zeit, die für die tatsächliche Ausführung der Testfälle benötigt wurde.
  • Environment: Die Zeit, die für die Einrichtung der Testumgebung (environment), z.B. JSDOM, aufgewendet wurde.
  • Prepare: Die Zeit, die Vitest für die Vorbereitung des Test-Runners benötigt.

Test-Runner ​

Wenn Ihre Testausführungszeit hoch ist, können Sie ein Profil des Test-Runners generieren. Beachten Sie die NodeJS-Dokumentation für die folgenden Optionen:

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

WARNING

Die Option --prof funktioniert nicht mit pool: 'threads' aufgrund von Einschränkungen von node:worker_threads.

Um diese Optionen an den Vitest-Testlauf zu übergeben, definieren Sie poolOptions.<pool>.execArgv in Ihrer Vitest-Konfiguration:

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',
        ],

        // Um ein einzelnes Profil zu generieren
        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',
        ],

        // Um ein einzelnes Profil zu generieren
        singleThread: true,
      },
    },
  },
});

Nachdem die Tests ausgeführt wurden, sollten test-runner-profile/*.cpuprofile- und test-runner-profile/*.heapprofile-Dateien generiert worden sein. Anweisungen zur Analyse dieser Dateien finden Sie unter Profilierungsdatensätze inspizieren.

Ein Beispiel finden Sie unter Profiling | Examples.

Haupt-Thread ​

Die Profilierung des Haupt-Threads ist nützlich für das Debugging der Vite-Nutzung in Vitest sowie der globalSetup-Dateien. Hier laufen auch Ihre Vite-Plugins.

TIP

Weitere Tipps zur Vite-spezifischen Profilierung finden Sie unter Leistung | Vite.

Wir empfehlen vite-plugin-inspect zur Profilierung der Leistung Ihrer Vite-Plugins.

Dazu müssen Sie Argumente an den Node-Prozess übergeben, der Vitest ausführt.

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

Nachdem die Tests ausgeführt wurden, sollte eine main-profile/*.cpuprofile-Datei generiert worden sein. Anweisungen zur Analyse dieser Dateien finden Sie unter Profilierungsdatensätze inspizieren.

Dateitransformation ​

Wenn Ihre Testtransformations- und Sammlungszeit hoch ist, können Sie die Umgebungsvariable DEBUG=vite-node:* verwenden, um zu sehen, welche Dateien von vite-node transformiert und ausgeführt werden.

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
...

Diese Profilierungsstrategie ist eine gute Möglichkeit, unnötige Transformationen zu identifizieren, die durch Barrel-Dateien verursacht werden. Wenn diese Protokolle Dateien enthalten, die beim Ausführen Ihres Tests nicht geladen werden sollten, haben Sie möglicherweise Barrel-Dateien, die unnötigerweise Dateien importieren.

Sie können auch die Vitest UI verwenden, um Langsamkeit zu debuggen, die durch Barrel-Dateien verursacht wird. Das folgende Beispiel zeigt, wie das Importieren von Dateien ohne Barrel-Datei die Anzahl der transformierten Dateien um ~85% reduziert.

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- Zu testende Datei
│       ├── 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, die Probleme mit Barrel-Dateien demonstriert

Um zu sehen, wie Dateien transformiert werden, können Sie die Umgebungsvariable VITE_NODE_DEBUG_DUMP verwenden, um transformierte Dateien im Dateisystem zu schreiben:

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

Code-Abdeckung ​

Wenn die Generierung der Code-Abdeckung in Ihrem Projekt langsam ist, können Sie die Umgebungsvariable DEBUG=vitest:coverage verwenden, um die Leistungsprotokollierung zu aktivieren.

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

Dieser Profilierungsansatz ist hervorragend geeignet, um große Dateien zu erkennen, die versehentlich von Abdeckungs-Providern erfasst werden. Wenn Ihre Konfiguration beispielsweise versehentlich große, minifizierte Javascript-Dateien in die Code-Abdeckung einschließt, sollten diese in den Protokollen erscheinen. In diesen Fällen möchten Sie möglicherweise Ihre Optionen coverage.include und coverage.exclude anpassen.

Profilierungsdatensätze inspizieren ​

Sie können den Inhalt von *.cpuprofile und *.heapprofile mit verschiedenen Tools inspizieren. Eine Liste mit Beispielen finden Sie unten.

  • 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
Vorherige SeiteMigrationsleitfaden
Nächste SeiteLeistung verbessern

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2021-Present Vitest Team

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

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2021-Present Vitest Team