Skip to content
Vitest 2
Main Navigation РуководствоAPIКонфигурацияРежим браузераПродвинутый
2.1.9
1.6.1
0.34.6

Русский

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

Русский

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

Внешний вид

Sidebar Navigation

Зачем Vitest

Начало работы

Функциональность

Рабочая область

Интерфейс командной строки

Фильтрация тестов

Репортёры

Покрытие кода

Снапшоты

Мокирование

Тестирование типов

Vitest UI

In-source тестирование (Тестирование в исходном коде)

Контекст теста

Тестовая среда

Расширение проверок (matchers)

Интеграции с IDE

Отладка

Сравнения с другими тестовыми фреймворками

Руководство по миграции

Распространенные ошибки

Profiling Test Performance

Улучшение производительности

Содержание страницы

Профилирование производительности тестов ​

При запуске Vitest отображает несколько метрик времени выполнения ваших тестов:

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)
  # Метрики времени ^^
  • Transform: Время, затраченное на преобразование файлов. См. Преобразование файлов.
  • Setup: Время, затраченное на выполнение файлов, указанных в setupFiles.
  • Collect: Время, затраченное на сбор всех тестов в тестовых файлах. Это включает время на импорт всех зависимостей файлов.
  • Tests: Время, затраченное непосредственно на выполнение тестов.
  • Environment: Время, затраченное на настройку тестовой environment, например JSDOM.
  • Prepare: Время, которое Vitest тратит на подготовку тестового раннера.

Тестовый раннер ​

Если время выполнения ваших тестов значительно, вы можете сгенерировать профиль производительности тестового раннера. См. документацию Node.js по следующим опциям:

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

WARNING

Опция --prof не работает с pool: 'threads' из-за ограничений node:worker_threads.

Чтобы передать эти опции тестовому раннеру Vitest, задайте poolOptions.<pool>.execArgv в вашей конфигурации 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',
        ],

        // Чтобы сгенерировать единый профиль
        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',
        ],

        // Чтобы сгенерировать единый профиль
        singleThread: true,
      },
    },
  },
});

После выполнения тестов будут сгенерированы файлы test-runner-profile/*.cpuprofile и test-runner-profile/*.heapprofile. Инструкции по анализу этих файлов см. в разделе Просмотр записей профилирования.

Пример можно найти в Profiling | Examples.

Основной поток ​

Профилирование основного потока полезно для отладки работы Vitest с Vite и файлов globalSetup. Именно здесь также выполняются ваши плагины Vite.

TIP

См. Performance | Vite для получения дополнительных советов по профилированию, специфичному для Vite.

Для профилирования производительности ваших плагинов Vite мы рекомендуем vite-plugin-inspect.

Для этого необходимо передать аргументы процессу Node.js, который запускает Vitest.

bash
$ node --cpu-prof --cpu-prof-dir=main-profile ./node_modules/vitest/vitest.mjs --run
#      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                  ^^^^^
#               Аргументы Node.js                                           Аргументы Vitest

После выполнения тестов будет сгенерирован файл main-profile/*.cpuprofile. Инструкции по анализу этих файлов см. в разделе Просмотр записей профилирования.

Преобразование файлов ​

Если время трансформации и сбора тестов велико, вы можете использовать переменную окружения DEBUG=vite-node:* для просмотра файлов, которые преобразуются и выполняются 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
...

Эта стратегия профилирования — эффективный способ выявления ненужных преобразований, вызванных barrel files. Если эти логи содержат файлы, которые не должны загружаться при запуске вашего теста, возможно, ваши barrel files импортируют лишние файлы.

Вы также можете использовать Vitest UI для отладки замедлений, вызванных barrel file. Пример ниже показывает, как импорт файлов без barrel file уменьшает количество преобразованных файлов примерно на 85%.

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- Тестируемый файл
│       ├── 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, демонстрирующий проблемы с barrel file

Чтобы просмотреть, как преобразуются файлы, вы можете использовать переменную окружения VITE_NODE_DEBUG_DUMP для сохранения преобразованных файлов в файловой системе:

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

Просмотр записей профилирования ​

Вы можете анализировать содержимое файлов *.cpuprofile и *.heapprofile с помощью различных инструментов. Примеры приведены в списке ниже.

  • 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
Предыдущая страницаРаспространенные ошибки
Следующая страницаУлучшение производительности

Выпущено на условиях лицензии MIT.

Авторские права (c) 2024 Mithril Contributors

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

Выпущено на условиях лицензии MIT.

Авторские права (c) 2024 Mithril Contributors