Skip to content
Vitest 2
Main Navigation PrůvodceAPIKonfiguraceRežim prohlížečePokročilý
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

Proč Vitest

Začínáme

Funkce

Workspace

Rozhraní příkazového řádku

Filtrování testů

Reportéři

Pokrytí

Snímky

Mockování

Testování typů

Vitest UI

Testování ve zdrojovém kódu

Kontext testu

Testovací prostředí

Rozšíření matcherů/porovnávačů

Integrace do IDE

Ladění

Srovnání s jinými testovacími nástroji

Průvodce migrací

Běžné chyby

Profiling Test Performance

Zvýšení výkonu

Na této stránce

Profilování výkonu testů ​

Při spuštění Vitest zobrazí několik časových metrik pro vaše testy:

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)
  # Metriky času ^^
  • Transform: Doba strávená transformací souborů. Viz Transformace souborů.
  • Setup: Doba strávená spouštěním souborů setupFiles.
  • Collect: Doba strávená shromažďováním všech testů v testovacích souborech. To zahrnuje čas strávený importem všech závislostí souborů.
  • Tests: Doba strávená skutečným spouštěním testovacích případů.
  • Environment: Doba strávená nastavením testovacího environment, například JSDOM.
  • Prepare: Doba, kterou Vitest potřebuje k přípravě testovacího runneru.

Testovací runner ​

Pokud je doba spuštění testů vysoká, můžete vygenerovat profil testovacího runneru. Viz dokumentace Node.js pro následující možnosti:

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

WARNING

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

Pro předání těchto možností 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',
        ],

        // Pro generování jednoho profilu
        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',
        ],

        // Pro generování jednoho profilu
        singleThread: true,
      },
    },
  },
});

Po spuštění testů by měly vzniknout soubory test-runner-profile/*.cpuprofile a test-runner-profile/*.heapprofile. Pokyny pro analýzu těchto souborů naleznete v části 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í použití Vite v rámci Vitest a souborů globalSetup. Zde také běží vaše Vite pluginy.

TIP

Další tipy na profilování specifické pro Vite naleznete v Performance | Vite.

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

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

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

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

Transformace souborů ​

V případech, kdy 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 efektivní způsob, jak identifikovat zbytečné transformace způsobené barrel files. Pokud tyto záznamy obsahují soubory, které by neměly být načteny při spuštění testu, je možné, že používáte barrel files, které zbytečně importují soubory.

Můžete také použít Vitest UI k odhalení příčin pomalosti způsobené barrel files. Následující příklad ukazuje, jak importování souborů bez barrel files 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 file

Chcete-li zjistit, jak jsou soubory transformovány, můžete použít proměnnou prostředí VITE_NODE_DEBUG_DUMP k zápisu 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

Inspekce záznamů profilování ​

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

  • 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ánkaBěžné chyby
Další stránkaZvýšení výkonu

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors

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

Vydáno pod licencí MIT.

Copyright (c) 2024 Mithril Contributors