CodeBlanks Logo Icon CodeBlanks

Meydan okuma - Performans optimizasyonu

JavaScript kursu · Uzman · Ders 59/63

Memoization, debounce ve performans ölçümü ile bir arama önerisi fonksiyonu yazarsın.

Hızlı arama önerisi

Bu meydan okumada hızlı bir arama önerisi fonksiyonu yazacaksın. Aynı sorguyu tekrar hesaplamamak için memoization kullanırsın: sonuçları bir Map'e kaydedersin ve anahtar varsa hemen dönersin.

Girdileri biriktirmek için debounce(fn, ms) yazarsın; dönen fonksiyon her çağrıda önceki zamanlayıcıyı temizler ve yeni bir setTimeout kurar. Böylece hızlı yazımda fonksiyon yalnızca durulduğunda çalışır.

Süreyi ölçmek için performance.now() kullanırsın; milisaniye çözünürlüğünde zaman damgası verir.

Uygulama Debounced memoized arama önerisi

Bir memoize(fn) fonksiyonu yaz: dönen fonksiyon bir key alır, Map'te anahtar varsa sonucu döndürür, yoksa hesaplayıp kaydeder. Sonra debounce(fn, ms) yaz: dönen fonksiyon her çağrıda clearTimeout ile önceki zamanlayıcıyı temizler ve setTimeout kurar. Son olarak performance.now() ile çağrı süresini ölçen bir ifade ekle.

Örnek çözümü göster
function memoize(fn) { const cache = new Map(); return function(key) { if (cache.has(key)) return cache.get(key); const r = fn(key); cache.set(key, r); return r; }; } ile başla. Sonra function debounce(fn, ms) { let t; return function(...args) { clearTimeout(t); t = setTimeout(() => fn.apply(this, args), ms); }; } yaz. Son olarak const start = performance.now(); ekleyebilirsin.

Örnek çözüm:
function memoize(fn) {
  const cache = new Map();
  return function(key) {
    if (cache.has(key)) return cache.get(key);
    const result = fn(key);
    cache.set(key, result);
    return result;
  };
}

function debounce(fn, ms) {
  let timer;
  return function(...args) {
    clearTimeout(timer);
    const start = performance.now();
    timer = setTimeout(() => fn.apply(this, args), ms);
  };
}

Kendini test et

  1. debounce ile throttle arasındaki fark nedir?

    function debounce(fn, ms) {
      let t;
      return function(...args) {
        clearTimeout(t);
        t = setTimeout(() => fn.apply(this, args), ms);
      };
    }
    • debounce durulunca, throttle sabit aralıkla çalışır
    • İkisi de aynı şeyi yapar
    • throttle callback'i hemen iptal eder
    • debounce callback'i her çağrıda çalıştırır
    Cevabı göster

    debounce durulunca, throttle sabit aralıkla çalışır — Doğru! debounce çağrıları biriktirir ve durulunca tek sefer çalıştırır; throttle ise sabit aralıklarla çağırır.

  2. Memoization önbellek kontrolü

    function memoize(fn) {
      const cache = new Map();
      return function(key) {
        if (____) {
          return cache.get(key);
        }
        const result = fn(key);
        cache.set(key, result);
        return result;
      };
    }
    Cevabı göster
    function memoize(fn) {
      const cache = new Map();
      return function(key) {
        if (cache.has(key)) {
          return cache.get(key);
        }
        const result = fn(key);
        cache.set(key, result);
        return result;
      };
    }
  3. Performans kavramlarını eşleştir

    memoization
    Sonuçları önbelleğe al
    debounce
    Durulunca çağır
    performance.now()
    Süre ölçer
    clearTimeout
    Zamanlayıcıyı iptal et

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