Test Performansını Profillendirme
Vitest'i çalıştırdığınızda, testlerinizin çeşitli zaman metriklerini raporlar:
bashRUN v2.1.1 /x/vitest/examples/profiling ✓ test/prime-number.test.ts (1) 4517ms ✓ generate prime number 4517ms Test Dosyaları 1 başarılı (1) Testler 1 başarılı (1) Başlangıç 09:32:53 Süre 4.80s (Dönüştürme 44ms, Kurulum 0ms, Toplama 35ms, Testler 4.52s, Ortam 0ms, Hazırlık 81ms) # Zaman metrikleri ^^
- Dönüştürme: Dosyaların dönüştürülmesi için harcanan süre. Bkz. Dosya Dönüştürme.
- Kurulum:
setupFiles
dosyalarının çalıştırılması için harcanan süre. - Toplama: Test dosyalarındaki tüm testlerin toplanması için harcanan süre. Buna, tüm dosya bağımlılıklarını içe aktarmak için geçen süre de dahildir.
- Testler: Test senaryolarının fiilen yürütülmesi için harcanan süre.
- Ortam: Test
environment
(örneğin JSDOM) kurulumu için harcanan süre. - Hazırlık: Vitest'in test çalıştırıcısını hazırlamak için harcadığı süre.
Test Çalıştırıcısı
Test yürütme süreniz yüksek olduğunda, test çalıştırıcısının bir profilini oluşturabilirsiniz. Aşağıdaki seçenekler için NodeJS belgelerine bakın:
WARNING
--prof
seçeneği, node:worker_threads
sınırlamaları nedeniyle pool: 'threads'
ile çalışmaz.
Bu seçenekleri Vitest'in test çalıştırıcısına geçirmek için, Vitest yapılandırmanızda poolOptions.<pool>.execArgv
'yi tanımlayın:
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',
],
// Tek bir profil oluşturmak için
singleFork: true,
},
},
},
});
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',
],
// Tek bir profil oluşturmak için
singleThread: true,
},
},
},
});
Testler çalıştıktan sonra test-runner-profile/*.cpuprofile
ve test-runner-profile/*.heapprofile
dosyaları oluşturulmuş olmalıdır. Bu dosyaları nasıl analiz edeceğinize ilişkin talimatlar için Profillendirme kayıtlarını inceleme bölümüne bakın.
Örnek için Profillendirme | Örnekler bölümüne bakın.
Ana İş Parçacığı
Ana iş parçacığını profillendirmek, Vitest'in Vite kullanımını ve globalSetup
dosyalarını hata ayıklamak için faydalıdır. Vite eklentileriniz de burada yürütülür.
TIP
Vite'a özgü profillendirme hakkında daha fazla ipucu için Performans | Vite bölümüne bakın.
Vite eklenti performansınızı profillendirmek için vite-plugin-inspect
kullanmanızı öneririz.
Bunu yapmak için Vitest'i çalıştıran Node işlemine argümanlar iletmeniz gerekir.
$ node --cpu-prof --cpu-prof-dir=main-profile ./node_modules/vitest/vitest.mjs --run
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^
# NodeJS argümanları Vitest argümanları
Testler çalıştıktan sonra main-profile/*.cpuprofile
dosyası oluşturulmuş olmalıdır. Bu dosyaları nasıl analiz edeceğinize ilişkin talimatlar için Profillendirme kayıtlarını inceleme bölümüne bakın.
Dosya Dönüştürme
Test dönüştürme ve toplama süreniz yüksekse, DEBUG=vite-node:*
ortam değişkenini kullanarak hangi dosyaların vite-node
tarafından dönüştürüldüğünü ve yürütüldüğünü görebilirsiniz.
$ 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
...
Bu profilleme stratejisi, barrel dosyalarının neden olduğu gereksiz dönüşümleri belirlemek için etkili bir yöntemdir. Bu günlükler, testiniz çalıştırıldığında yüklenmemesi gereken dosyaları içeriyorsa, barrel dosyalarınız gereksiz içe aktarmalar yapıyor olabilir.
Barrel dosyasının neden olduğu yavaşlık sorunlarını gidermek için Vitest UI kullanabilirsiniz. Aşağıdaki örnek, barrel dosyası olmadan dosyaları içe aktarmanın dönüştürülen dosya miktarını yaklaşık %85 oranında nasıl azalttığını gösteriyor.
├── src
│ └── utils
│ ├── currency.ts
│ ├── formatters.ts <-- Test edilecek dosya
│ ├── index.ts
│ ├── location.ts
│ ├── math.ts
│ ├── time.ts
│ └── users.ts
├── test
│ └── formatters.test.ts
└── vitest.config.ts
import { expect, test } from 'vitest';
import { formatter } from '../src/utils';
import { formatter } from '../src/utils/formatters';
test('formatter works', () => {
expect(formatter).not.toThrow();
});

Dosyaların nasıl dönüştürüldüğünü görmek için, dönüştürülen dosyaları dosya sistemine yazmak üzere VITE_NODE_DEBUG_DUMP
ortam değişkenini kullanabilirsiniz:
$ VITE_NODE_DEBUG_DUMP=true vitest --run
[vite-node] [debug] modülleri /x/examples/profiling/.vite-node/dump konumuna yaz
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
Profillendirme Kayıtlarını İnceleme
*.cpuprofile
ve *.heapprofile
dosyalarını çeşitli araçlarla inceleyebilirsiniz. Örnekler için aşağıdaki listeye bakın.