Skip to content
Vitest 3
Main Navigation Průvodce & APIKonfiguraceRežim prohlížečePokročilé API
3.2.0
2.1.9
1.6.1
0.34.6

čeština

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

čeština

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

Vzhled

Sidebar Navigation

Úvod

Proč Vitest

Začínáme

Funkce

Konfigurace Vitestu

API

Testovací reference API

Mockovací funkce

Vi

expect

expectTypeOf

assert

assertType

Průvodce

Rozhraní příkazového řádku

Filtrování testů

Testovací projekty

Generátory zpráv

Pokrytí kódu

Snímky

Mockování

Paralelní zpracování

Typové testování

Vitest UI

Testování přímo ve zdrojovém kódu

Testovací kontext

Anotace testů

Testovací prostředí

Rozšíření matcherů

Integrace s IDE

Ladění

Běžné chyby

Průvodce migrací

Migrace na Vitest 3.0

Migrace z Jest

Výkon

Profilování výkonu testů

Zlepšení výkonu

Režim prohlížeče

Rozšířené API

Srovnání

Na této stránce

Profilování výkonu testů ​

Při spuštění Vitestu se zobrazí několik časových metrik vašich testů:

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: Čas strávený transformací souborů. Viz Transformace souborů.
  • Setup: Čas potřebný ke spuštění souborů setupFiles.
  • Collect: Čas strávený shromažďováním všech testů v testovacích souborech, včetně importu všech závislostí souborů.
  • Tests: Čas strávený spuštěním testovacích případů.
  • Environment: Čas potřebný k nastavení testovacího environment, například JSDOM.
  • Prepare: Čas, který Vitest potřebuje k přípravě testovacího runneru.

Testovací runner ​

Pokud je doba spuštění testu vysoká, můžete vygenerovat profil testovacího runneru. Následující možnosti naleznete v dokumentaci NodeJS:

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

WARNING

Možnost --prof nefunguje s pool: 'threads' kvůli omezením node:worker_threads.

Chcete-li tyto možnosti předat testovacímu runneru Vitest, definujte poolOptions.<pool>.execArgv ve vaší konfiguraci 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',
        ],

        // To generate a single profile
        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',
        ],

        // To generate a single profile
        singleThread: true,
      },
    },
  },
});

Po spuštění testů by měly být vygenerovány soubory test-runner-profile/*.cpuprofile a test-runner-profile/*.heapprofile. Pokyny k analýze těchto souborů naleznete v sekci Inspekce záznamů profilování.

Příklad naleznete v Profiling | Examples.

Hlavní vlákno ​

Profilování hlavního vlákna je užitečné pro ladění způsobu, jakým Vitest používá Vite, a souborů globalSetup. Zde se také spouštějí vaše Vite pluginy.

TIP

Další tipy týkající se profilování specifického pro Vite naleznete v Performance | Vite.

Pro profilování výkonu vašeho Vite pluginu doporučujeme vite-plugin-inspect.

K tomu je třeba předat argumenty procesu Node, který spouští Vitest.

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

Po spuštění testů by měl být vygenerován soubor main-profile/*.cpuprofile. Pokyny k analýze těchto souborů naleznete v sekci Inspekce záznamů profilování.

Transformace souborů ​

Pokud je doba transformace a sběru testů vysoká, můžete použít proměnnou prostředí DEBUG=vite-node:* k zobrazení, které soubory jsou transformovány a spouštěny 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
...

Tato strategie profilování je účinným způsobem, jak identifikovat zbytečné transformace způsobené barrel soubory. Pokud tyto záznamy obsahují soubory, které by neměly být načteny při spuštění testu, je možné, že máte barrel soubory, které zbytečně importují soubory.

Můžete také použít Vitest UI k diagnostice pomalosti způsobené barrel souborem. Níže uvedený příklad ukazuje, jak import souborů bez použití barrel souborů snižuje množství transformovaných souborů o ~85%.

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- Soubor k testování
│       ├── 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 demonstrující problémy s barrel soubory

Chcete-li vidět, jak jsou soubory transformovány, můžete použít proměnnou prostředí VITE_NODE_DEBUG_DUMP pro zápis transformovaných souborů do souborového systému:

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

Pokrytí kódu ​

Pokud je generování pokrytí kódu ve vašem projektu pomalé, můžete použít proměnnou prostředí DEBUG=vitest:coverage pro povolení protokolování výkonu.

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

Tento přístup profilování je vynikající pro detekci velkých souborů, které jsou náhodně vybrány poskytovateli pokrytí. Například pokud vaše konfigurace náhodně zahrnuje velké sestavené minifikované soubory Javascriptu do pokrytí kódu, objeví se v protokolech. V těchto případech je vhodné upravit své možnosti coverage.include a coverage.exclude.

Inspekce záznamů profilování ​

Obsah souborů *.cpuprofile a *.heapprofile můžete zkontrolovat pomocí různých nástrojů. Příklady naleznete v seznamu níže.

  • 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
Předchozí stránkaPrůvodce migrací
Další stránkaZlepšení výkonu

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team

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

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team