Skip to content
Vitest 3
Main Navigation Przewodnik & APIKonfiguracjaTryb przeglądarkiZaawansowane API
3.2.0
2.1.9
1.6.1
0.34.6

Polski

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

Polski

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

Wygląd

Sidebar Navigation

Wprowadzenie

Dlaczego Vitest

Pierwsze kroki

Funkcje

Konfiguracja Vitest

API

Dokumentacja API testowego

Funkcje Mock

Vi

expect

expectTypeOf

assert

assertType

Przewodnik

Interfejs Wiersza Poleceń

Filtrowanie testów

Projekty testowe

Reportery

Pokrycie kodu

Migawki

Mockowanie

Równoległość

Typy testów

Interfejs użytkownika Vitest

Testy w kodzie źródłowym

Kontekst Testu

Adnotacje testowe

Środowisko testowe

Rozszerzanie matcherów

Integracje z IDE

Debugowanie

Typowe błędy

Przewodnik migracji

Migracja do Vitest 3.0

Migracja z Jest

Wydajność

Profilowanie wydajności testów

Poprawa wydajności

Tryb przeglądarkowy

Zaawansowane API

Porównania z innymi narzędziami do uruchamiania testów

Na tej stronie

Profilowanie wydajności testów ​

Podczas uruchamiania Vitest raportuje wiele metryk czasowych Twoich testów:

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: Czas poświęcony na przekształcanie plików. Zobacz Przekształcanie plików.
  • Setup: Czas poświęcony na wykonywanie plików setupFiles.
  • Collect: Czas poświęcony na zbieranie wszystkich testów w plikach testowych. Obejmuje to czas importowania wszystkich zależności plików.
  • Tests: Czas poświęcony na faktyczne uruchamianie przypadków testowych.
  • Environment: Czas poświęcony na konfigurację środowiska testowego environment, na przykład JSDOM.
  • Prepare: Czas, którego Vitest używa do przygotowania środowiska testowego.

Narzędzie do uruchamiania testów ​

Gdy czas wykonywania testów jest wysoki, możesz wygenerować profil narzędzia do uruchamiania testów. Zobacz dokumentację NodeJS dotyczącą następujących opcji:

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

WARNING

Opcja --prof nie działa z pool: 'threads' z powodu ograniczeń node:worker_threads.

Aby przekazać te opcje do narzędzia do uruchamiania testów Vitest, zdefiniuj poolOptions.<pool>.execArgv w konfiguracji 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',
        ],

        // Aby wygenerować pojedynczy profil
        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',
        ],

        // Aby wygenerować pojedynczy profil
        singleThread: true,
      },
    },
  },
});

Po uruchomieniu testów powinny zostać wygenerowane pliki test-runner-profile/*.cpuprofile i test-runner-profile/*.heapprofile. Zobacz Inspekcja rekordów profilowania w celu uzyskania instrukcji, jak analizować te pliki.

Zobacz Profilowanie | Przykłady, aby zapoznać się z przykładem.

Główny wątek ​

Profilowanie głównego wątku jest przydatne do debugowania użycia Vite w Vitest i plików globalSetup. To także miejsce, gdzie działają Twoje wtyczki Vite.

TIP

Więcej wskazówek dotyczących profilowania specyficznego dla Vite znajdziesz w Wydajność | Vite.

Polecamy vite-plugin-inspect do profilowania wydajności Twojej wtyczki Vite.

Aby to zrobić, musisz przekazać argumenty do procesu Node, który uruchamia Vitest.

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

Po uruchomieniu testów powinien zostać wygenerowany plik main-profile/*.cpuprofile. Zobacz Inspekcja rekordów profilowania w celu uzyskania instrukcji, jak analizować te pliki.

Przekształcanie plików ​

Gdy czas przekształcania i zbierania testów jest wysoki, możesz użyć zmiennej środowiskowej DEBUG=vite-node:*, aby zobaczyć, które pliki są przekształcane i wykonywane przez 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
...

Ta strategia profilowania jest dobrym sposobem na identyfikację niepotrzebnych przekształceń spowodowanych przez pliki barrel. Jeśli te logi zawierają pliki, które nie powinny być ładowane podczas uruchamiania testu, możesz mieć pliki barrel, które niepotrzebnie importują pliki.

Możesz również użyć Vitest UI do debugowania spowolnień związanych z plikami barrel. Poniższy przykład pokazuje, jak importowanie plików bez pliku barrel zmniejsza ilość przekształconych plików o ~85%.

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- Plik do testowania
│       ├── 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();
});
Interfejs użytkownika Vitest demonstrujący problemy z plikami zbiorczymi

Aby zobaczyć, jak pliki są przekształcane, możesz użyć zmiennej środowiskowej VITE_NODE_DEBUG_DUMP, aby zapisać przekształcone pliki na dysku:

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

Pokrycie kodu ​

Jeśli generowanie pokrycia kodu jest wolne w Twoim projekcie, możesz użyć zmiennej środowiskowej DEBUG=vitest:coverage, aby włączyć logi wydajności.

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

To podejście do profilowania jest świetne do wykrywania dużych plików, które są przypadkowo wybierane przez dostawców pokrycia. Na przykład, jeśli Twoja konfiguracja przypadkowo zawiera duże, zminifikowane pliki Javascript w pokryciu kodu, powinny one pojawić się w logach. W takich przypadkach możesz chcieć dostosować opcje coverage.include i coverage.exclude.

Inspekcja rekordów profilowania ​

Możesz sprawdzić zawartość plików *.cpuprofile i *.heapprofile za pomocą różnych narzędzi. Poniżej znajduje się lista przykładów.

  • Speedscope
  • Profilowanie wydajności JavaScript w Visual Studio Code
  • Profilowanie wydajności Node.js za pomocą panelu Performance | developer.chrome.com
  • Przegląd panelu Memory | developer.chrome.com
Pager
Poprzednia stronaPrzewodnik migracji
Następna stronaPoprawa wydajności

Opublikowano na licencji MIT.

Copyright (c) 2021-Present Vitest Team

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

Opublikowano na licencji MIT.

Copyright (c) 2021-Present Vitest Team