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:
setupFilesdosyaları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.tsimport { 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.jsProfillendirme Kayıtlarını İnceleme
*.cpuprofile ve *.heapprofile dosyalarını çeşitli araçlarla inceleyebilirsiniz. Örnekler için aşağıdaki listeye bakın.