Memoization
Pahalı bir fonksiyonun sonucunu önbellekte tutarak memoization yapmayı öğrenirsin.
Memoization
Memoization, pahalı bir fonksiyonun sonucunu hatırlayıp aynı girdi tekrar gelirse yeniden hesaplamak yerine önbellekten döndürme tekniğidir. Önbelleğe Map veya nesne kullanabilirsin.
Önbellekte bulursan buna cache hit, bulamazsan cache miss denir. Miss durumunda fonksiyon çalışır ve sonuç saklanır; hit durumunda ise fonksiyon çağrılmadan sonuç döner.
Uygulama Memoize fonksiyonu
memoize adında bir fonksiyon yaz. fn parametresini alıp önbellekli bir sarmalayıcı döndürsün. Sarmalayıcı, Map ile önbellek kullansın; anahtar için args.join("|") işe yarıyor.
Örnek çözümü göster
Map ile cache oluştur; has ile kontrol et, get ile döndür, set ile sakla.
Örnek çözüm:
function memoize(fn) {
const cache = new Map();
return function(...args) {
const key = args.join("|");
if (cache.has(key)) return cache.get(key);
const result = fn(...args);
cache.set(key, result);
return result;
};
}
Saf fonksiyonlar
Memoization yalnızca pure function olarak adlandırılan, aynı girdiye her zaman aynı çıktıyı veren fonksiyonlarda çalışır. Tarihe, rastgele sayıya veya dış kaynağa bağlı fonksiyonları önbelleğe almak yanlış sonuç üretir.
Bu yüzden memoize etmeden önce fonksiyonun yan etkisiz ve deterministik olduğundan emin ol.
Kendini test et
-
Önbellek kontrolü
if (cache.____) return cache.get(key);Cevabı göster
if (cache.has(key)) return cache.get(key); -
Hangi fonksiyon memoization için uygundur?
- Rastgele sayı üreten fonksiyon
- Tarihe göre farklı sonuç döndüren fonksiyon
- Veritabanından veri çeken fonksiyon
- Aynı girdiye her zaman aynı sonucu veren fonksiyon
Cevabı göster
Aynı girdiye her zaman aynı sonucu veren fonksiyon — Doğru! Saf ve deterministik fonksiyonlar memoization için uygundur.
-
Önbellek terimlerini eşleştir
- cache hit
- önbellekte bulundu
- cache miss
- önbellekte yok
- pure function
- aynı girdi aynı çıktı
- cache key
- önbellek anahtarı