Skip to content
Vitest 2
Main Navigation PrzewodnikAPIKonfiguracjaTryb przeglądarkiZaawansowany
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

Dlaczego Vitest

Wprowadzenie

Funkcje

Przestrzeń robocza

Interfejs Linii Poleceń

Filtrowanie Testów

Reportery

Pokrycie kodu

Snapshot

Mockowanie

Testowanie typów

Interfejs użytkownika Vitest

Testowanie w kodzie źródłowym

Kontekst Testowy

Środowisko Testowe

Rozszerzanie Matcherów

Integracje z IDE

Debugowanie

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

Przewodnik migracji

Częste błędy

Profiling Test Performance

Poprawa wydajności

Na tej stronie

Profilowanie wydajności testów ​

Podczas uruchamiania Vitest wyświetla szereg metryk czasowych dotyczących 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)
  # Metryki czasowe ^^
  • Transform: Czas poświęcony na transformację plików. Więcej informacji w sekcji Przekształcanie plików.
  • Setup: Czas poświęcony na uruchamianie plików zdefiniowanych w setupFiles.
  • Collect: Czas poświęcony na zbieranie wszystkich testów z plików testowych. Obejmuje to czas potrzebny na zaimportowanie 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óry Vitest wykorzystuje na przygotowanie narzędzia do uruchamiania testów.

Profilowanie narzędzia do uruchamiania testów ​

Gdy czas wykonywania testów jest długi, możesz wygenerować profil narzędzia do uruchamiania testów. Zapoznaj się z 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 uruchamiającego testy 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 zostaną wygenerowane pliki test-runner-profile/*.cpuprofile i test-runner-profile/*.heapprofile. Instrukcje dotyczące analizy tych plików znajdziesz w sekcji Inspekcja rekordów profilowania.

Przykład użycia znajdziesz w Profiling | Examples.

Profilowanie głównego wątku ​

Profilowanie głównego wątku jest przydatne do debugowania sposobu, w jaki Vitest wykorzystuje Vite oraz plików globalSetup. W tym wątku działają również wtyczki Vite.

TIP

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

Do profilowania wydajności wtyczek Vite zalecamy użycie vite-plugin-inspect.

Aby to zrobić, musisz przekazać argumenty do procesu Node.js uruchamiającego 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. Instrukcje dotyczące analizy tych plików znajdziesz w sekcji Inspekcja rekordów profilowania.

Analiza przekształcania 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
...

Takie profilowanie to dobry sposób na identyfikację niepotrzebnych przekształceń spowodowanych przez pliki beczkowe (barrel files). Jeśli te logi zawierają pliki, które nie powinny być ładowane podczas uruchamiania testu, może to oznaczać, że masz pliki beczkowe, które niepotrzebnie importują inne pliki.

Możesz również użyć Vitest UI do debugowania spowolnień spowodowanych przez pliki beczkowe. Poniższy przykład pokazuje, jak importowanie plików bez pliku beczkowego redukuje liczbę transformowanych plików o okoł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();
});
Vitest UI pokazujący problemy z plikami beczkowymi

Aby prześledzić proces transformacji plików, możesz użyć zmiennej środowiskowej VITE_NODE_DEBUG_DUMP w celu zapisania przekształconych plików w systemie plików:

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

Inspekcja rekordów profilowania ​

Zawartość plików *.cpuprofile i *.heapprofile można analizować za pomocą różnych narzędzi. Poniżej znajduje się lista przykładów:

  • 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
Poprzednia stronaCzęste błędy
Następna stronaPoprawa wydajności

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors

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

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors