Bellek sızmaları
Sık karşılaşılan bellek sızması nedenlerini ve nasıl önleneceğini öğrenirsin.
Bellek sızıntısı
Bellek sızıntısı, bir programın kullanmadığı belleği çöp toplayıcıya geri verememesidir. JavaScript'te çöp toplayıcı (garbage collector), artık erişilemeyen verileri otomatik temizler.
Ancak bir referans yanlışlıkla canlı tutulursa, o veri hiçbir zaman serbest bırakılmaz. Zamanla biriken bu veriler sayfa yavaşlar ve sonunda çökebilir. Bu yüzden zamanlayıcı ve dinleyicileri temizlemek önemlidir.
Sızıntıyı önlemek
Sızıntıyı önlemek için gereksiz referansları koparmalısın. Zamanlayıcıları clearInterval ile durdur, olay dinleyicilerini removeEventListener ile kaldır.
Büyük nesneleri tutarken WeakMap veya WeakSet kullanmak, anahtar çöp toplandığında değerin de otomatik temizlenmesini sağlar. Bu, önbellek gibi yapılarla çalışırken ek bir güvence sunar ve sızıntı riskini azaltır.
Uygulama Dinleyici ve cleanup
setupLogger adında bir fonksiyon yaz. element parametresini alıp click olayı için bir dinleyici eklesin ve cleanup adında bir temizleme fonksiyonu döndürsün. cleanup, dinleyiciyi removeEventListener ile kaldırsın.
Örnek çözümü göster
log fonksiyonunu sakla; addEventListener ile ekle, return function cleanup() ile removeEventListener çağır.
Örnek çözüm:
function setupLogger(element) {
const log = () => console.log("active", element.id);
element.addEventListener("click", log);
return function cleanup() {
element.removeEventListener("click", log);
};
}
Kendini test et
-
Aşağıdakilerden hangisi bellek sızıntısına yol açar?
- Yerel değişken kullanımı
- Kullanılmayan bir zamanlayıcının temizlenmemesi
- const ile değişken tanımlamak
- arrow function kullanmak
Cevabı göster
Kullanılmayan bir zamanlayıcının temizlenmemesi — Doğru! Temizlenmeyen zamanlayıcı, referans tuttuğu sürece belleği canlı tutar.
-
Zamanlayıcıyı temizle
function stop() { ____; timer = null; }Cevabı göster
function stop() { clearInterval(timer); timer = null; } -
Bellek terimlerini eşleştir
- garbage collection
- çöp toplama
- closure
- kapsamı canlı tutar
- WeakMap
- zayıf referans
- retained reference
- tutulan referans