CodeBlanks Logo Icon CodeBlanks

Benchmark

Benchmark yazma ve karşılaştırma öğrenirsin.

Benchmark nedir?

Bir benchmark, iki ya da daha fazla çözümü aynı iş yükü altında karşılaştırır. Node.js'te benchmark.js ya da tinybench gibi kütüphaneler bunu yapar; sonuç saniyedeki işlem sayısı (ops/sec) ile ölçülür.

Bir benchmarkLabel(opsPerSec) fonksiyonu bu sonucu etiketler: 1000 ve üstüyse 'fast', 100 ve üstüyse 'medium', yoksa 'slow' döndürür. Örnek: benchmarkLabel(1500) 'fast', benchmarkLabel(50) 'slow' döner. Bu, ham sayıyı üç kategoriye indirger. Gerçek benchmark araçları ısınma (warmup) ve istatistiksel dağılım da hesaplar; biz burada mantığı sadeleştiriyoruz. İki çözümü karşılaştırırken yalnızca ortalama değil, tutarlılık da önemlidir.

Isınma ve tutarlılık

Benchmark çalıştırırken ısınma (warmup) önemlidir. İlk birkaç çağrıda V8 henüz iyileştirme yapmamıştır; bu yüzden sonuç yavaş görünür. Isınma çağrıları atlandıktan sonra ölçüm başlar. Ayrıca tek bir ölçüm değil, birçok çalıştırmanın ortalaması ve dağılımı alınır.

Örnek: benchmarkLabel(1500) 'fast' döner; bu, ısınma sonrası ortalamanın yüksek olduğunu gösterir. benchmarkLabel(50) 'slow' dönerse, çözüm darboğazlı olabilir. Tutarsız sonuçlar (bir çalıştırmada 1500, diğerinde 50) genellikle çöp toplayıcı ya da sistem yükü kaynaklıdır. Bu yüzden benchmark sonuçlarını daima ısınma ve istatistiksel dağılımla yorumlamak gerekir.

Uygulama Benchmark etiket fonksiyonu yaz

function benchmarkLabel(opsPerSec) yaz. if (opsPerSec >= 1000) return 'fast';, if (opsPerSec >= 100) return 'medium'; ve return 'slow'; ekle. console.log(benchmarkLabel(1500)) ve console.log(benchmarkLabel(50)) yazdır.

Başlangıç kodu

index.js
// benchmarkLabel fonksiyonu yaz
// saniyedeki işlem sayısı 1000 ve üstüyse 'fast', 100 ve üstüyse 'medium', yoksa 'slow' döndürsün
// 1500 ve 50 çağrılarını yazdır
// buraya yaz

Örnek çözüm

index.js
function benchmarkLabel(opsPerSec) {
  if (opsPerSec >= 1000) return 'fast';
  if (opsPerSec >= 100) return 'medium';
  return 'slow';
}
console.log(benchmarkLabel(1500));
console.log(benchmarkLabel(50));

Beklenen çıktı

fast
slow

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 benchmarkLabel(1500) ne döndürür?

index.js
function benchmarkLabel(o) {
  if (o >= 1000) return 'fast';
  if (o >= 100) return 'medium';
  return 'slow';
}
benchmarkLabel(1500)
  • medium
  • fast Doğru cevap
  • slow
  • 1500

Açıklama: 1500 >= 1000 olduğundan 'fast' döner.

2 Parçayı rolüne eşle

Kavram Anlamı
ops/sec Saniyedeki işlem
warmup Isınma çağrısı
fast 1000 ve üstü
slow 100'ün altı

3 Fast dalını tamamla

Soru
if (opsPerSec >= ____) return 'fast';
Cevap
if (opsPerSec >= 1000) return 'fast';

Açıklama: fast için eşik 1000'dir.

Uzman bölümündeki tüm dersler