CodeBlanks Logo Icon CodeBlanks

Özet - Performans

Memoization, debounce ve throttle kullanarak bir arama girişi uygulaması yazarsın.

Özet - Performans

Bu grupta dört temel performans aracı öğrendin: performance.now ile ölçüm, memoization ile önbellekleme, debounce ile geciktirme ve throttle ile sınırlama.

Bellek sızıntılarını önlemek için zamanlayıcı ve dinleyicileri temiz tutmayı da gördün. Şimdi bunları bir arama girişinde birleştirip sağlam bir uygulama parçası kuracaksın.

Uygulama Önbellekli ve debounce'lu arama

createSearch adında bir fonksiyon yaz. fetchFn ve delay parametrelerini alıp önbellekli ve debounce'lu bir arama sarmalayıcısı döndürsün. Map ile önbellek, setTimeout ile gecikme kullansın.

Başlangıç kodu

script.js
// Arama girişi için debounce'lu ve önbellekli arama oluştur
// fetchFn ve delay parametreleri; Map ile önbellek, zamanlayıcı ile gecikme

Örnek çözüm

script.js
function createSearch(fetchFn, delay) {
  const memo = new Map();
  const run = (q) => {
    if (memo.has(q)) return memo.get(q);
    const result = fetchFn(q);
    memo.set(q, result);
    return result;
  };
  let timer = null;
  return function(query) {
    clearTimeout(timer);
    timer = setTimeout(() => run(query), delay);
  };
}

Uygulama Throttle'lı scroll dinleyicisi

setupScroll adında bir fonksiyon yaz. handler ve interval parametrelerini alıp throttle'lı bir scroll dinleyicisi kurup cleanup adında bir temizleme fonksiyonu döndürsün. Date.now() ile zamanı takip etsin.

Başlangıç kodu

script.js
// Throttle'lı scroll dinleyicisi kur ve temizleme fonksiyonu döndür
// handler ve interval parametreleri; lastRun ile sınırla, cleanup ile kaldır

Örnek çözüm

script.js
function setupScroll(handler, interval) {
  let lastRun = 0;
  const onScroll = () => {
    const now = Date.now();
    if (now - lastRun >= interval) {
      lastRun = now;
      handler(now);
    }
  };
  window.addEventListener("scroll", onScroll);
  return function cleanup() {
    window.removeEventListener("scroll", onScroll);
  };
}

Soru ve cevaplar

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

1 Önbellekten oku

Soru
const memo = new Map();
const run = (q) => {
  if (memo.has(q)) return ____;
  const result = fetchFn(q);
  memo.set(q, result);
  return result;
};
Cevap
const memo = new Map();
const run = (q) => {
  if (memo.has(q)) return memo.get(q);
  const result = fetchFn(q);
  memo.set(q, result);
  return result;
};

Açıklama: Hit durumunda memo.get(q) ile önbellekten döndürdün.

2 Aracı senaryoyla eşleştir

Kavram Anlamı
memoization pahalı hesap
debounce arama kutusu
throttle scroll olayı
cleanup dinleyici kaldırma

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