Skip to content
Vitest 2
Main Navigation LeitfadenAPIKonfigurationBrowser-ModusFortgeschritten
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

Warum Vitest

Erste Schritte

Features

Arbeitsbereich

Kommandozeilenschnittstelle

Testfilter

Reporter

Codeabdeckung (Coverage)

Snapshot

Mocking

Typen testen

Vitest UI

In-Source-Testing

Testkontext

Testumgebung

Erweiterung von Matchern

IDE-Integration

Debugging

Vergleiche mit anderen Test-Runnern

Migrationsleitfaden

Häufige Fehler

Profiling Test Performance

Leistungsverbesserung

Auf dieser Seite

Leistungsanalyse von Tests ​

Wenn Sie Vitest ausführen, werden verschiedene 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)
  # Zeitmetriken ^^
  • 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 benötigt 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 Dateiabhängigkeiten erforderlich war.
  • Tests: Die Zeit, die für die tatsächliche Ausführung der Testfälle aufgewendet wurde.
  • Environment: Die Zeit, die für die Einrichtung der Test-environment aufgewendet wurde, z. B. JSDOM.
  • Prepare: Die Zeit, die Vitest für die Vorbereitung des Test-Runners benötigt.

Test-Runner ​

In Fällen, in denen Ihre Testausführungszeit hoch ist, können Sie ein Profil des Test-Runners generieren. Die NodeJS-Dokumentation bietet hierfür folgende 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 Test-Runner 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',
        ],

        // Zur Generierung eines einzelnen Profils
        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',
        ],

        // Zur Generierung eines einzelnen Profils
        singleThread: true,
      },
    },
  },
});

Nach der Testausführung sollten test-runner-profile/*.cpuprofile und test-runner-profile/*.heapprofile Dateien generiert werden. Anweisungen zur Analyse dieser Dateien finden Sie unter Profilierungsaufzeichnungen inspizieren.

Ein Beispiel finden Sie unter Profiling | Examples.

Hauptthread ​

Das Profiling des Hauptthreads ist nützlich, um die Vite-Nutzung von Vitest und die globalSetup-Dateien zu debuggen. Hier werden auch Ihre Vite-Plugins ausgeführt.

TIP

Siehe Performance | Vite für weitere Tipps zum Vite-spezifischen Profiling.

Wir empfehlen vite-plugin-inspect für das Profiling Ihrer Vite-Plugin-Performance.

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

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

Nach der Testausführung sollte eine main-profile/*.cpuprofile-Datei generiert werden. Anweisungen zur Analyse dieser Dateien finden Sie unter Profilierungsaufzeichnungen inspizieren.

Dateitransformation ​

Wenn Ihre Testtransformations- und Sammelzeit 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 Profiling-Strategie ist eine gute Möglichkeit, unnötige Transformationen zu identifizieren, die durch Barrel-Dateien verursacht werden. Wenn diese Logs Dateien enthalten, die beim Ausführen Ihres Tests nicht geladen werden sollten, haben Sie möglicherweise Barrel-Dateien, die unnötige Dateiimporte verursachen.

Sie können auch die Vitest UI verwenden, um durch Barrel-Dateien verursachte Langsamkeit zu debuggen. Das folgende Beispiel zeigt, wie der Import von Dateien ohne Barrel-Datei die Anzahl der transformierten Dateien um ca. 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 demonstriert Barrel-Datei-Probleme

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

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

Profilierungsaufzeichnungen inspizieren ​

Sie können den Inhalt von *.cpuprofile und *.heapprofile mit verschiedenen Tools überprüfen. Beispiele finden Sie in der folgenden Liste.

  • 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 SeiteHäufige Fehler
Nächste SeiteLeistungsverbesserung

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors

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

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors