Skip to content
Vitest 2
Main Navigation 가이드API구성브라우저 모드고급
3.2.0
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

소스 내 테스트

테스트 컨텍스트

테스트 환경

Matcher 확장하기

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)
  # Time metrics ^^
  • Transform: 파일 변환에 소요된 시간입니다. 파일 변환을 참조하십시오.
  • Setup: setupFiles 파일 실행에 소요된 시간입니다.
  • Collect: 테스트 파일에서 모든 테스트를 수집하는 데 소요된 시간입니다. 여기에는 모든 파일 종속성 임포트 시간이 포함됩니다.
  • Tests: 실제 테스트 케이스 실행에 소요된 시간입니다.
  • Environment: 예를 들어 JSDOM과 같은 테스트 environment 설정에 소요된 시간입니다.
  • Prepare: Vitest가 테스트 러너를 준비하는 데 소요되는 시간입니다.

테스트 러너 ​

테스트 실행 시간이 길거나 성능 문제가 발생할 경우, 테스트 러너의 프로파일을 생성할 수 있습니다. 다음 옵션에 대한 NodeJS 문서를 참조하십시오.

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

WARNING

--prof 옵션은 node:worker_threads 제한으로 인해 pool: 'threads'와 호환되지 않습니다.

이러한 옵션을 Vitest의 테스트 러너에 전달하려면 Vitest 구성에서 poolOptions.<pool>.execArgv를 설정하십시오.

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,
      },
    },
  },
});

테스트가 실행된 후 test-runner-profile/*.cpuprofile 및 test-runner-profile/*.heapprofile 파일이 생성됩니다. 이 파일을 분석하는 방법에 대한 지침은 프로파일링 기록 검사를 참조하십시오.

자세한 예시는 프로파일링 | 예시를 참조하십시오.

메인 스레드 ​

메인 스레드 분석은 Vitest의 Vite 사용 및 globalSetup 파일을 디버깅하는 데 유용합니다. 또한 이곳에서 Vite 플러그인이 실행됩니다.

TIP

Vite 관련 프로파일링에 대한 자세한 팁은 성능 | Vite를 참조하십시오.

Vite 플러그인 성능 분석에는 vite-plugin-inspect를 권장합니다.

이렇게 하려면 Vitest를 실행하는 Node 프로세스에 인자를 전달해야 합니다.

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

테스트가 실행된 후 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
...

이 분석 전략은 배럴 파일로 인해 발생하는 불필요한 변환을 식별하는 좋은 방법입니다. 이러한 로그에 테스트 실행 시 로드되지 않아야 하는 파일이 포함되어 있는 경우, 불필요한 파일 가져오기를 유발하는 배럴 파일이 있을 수 있습니다.

Vitest UI를 사용하여 배럴 파일로 인한 성능 저하를 디버깅할 수도 있습니다. 아래 예시는 배럴 파일 없이 파일을 가져오는 것이 변환된 파일의 양을 약 85% 줄일 수 있음을 보여줍니다.

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- File to test
│       ├── 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

파일이 어떻게 변환되는지 확인하려면 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
  • Visual Studio Code에서 JavaScript 성능 분석
  • 성능 패널로 Node.js 성능 분석 | developer.chrome.com
  • 메모리 패널 개요 | developer.chrome.com
Pager
이전일반적인 오류
다음성능 향상

MIT 라이선스 하에 배포되었습니다.

Copyright (c) 2021-Present Vitest Team

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

MIT 라이선스 하에 배포되었습니다.

Copyright (c) 2021-Present Vitest Team