Meydan okuma - Performans optimizasyonu
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
-
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.
-
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; }; } -
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