Bellek sızmaları
- JavaScript kursu
- Uzman
- Ders 11/63
- 5 dk
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.
Başlangıç kodu
// Bir öğeye olay dinleyicisi ekle ve temizleme fonksiyonu döndür
// element parametresi al; click için dinleyici ekle, cleanup döndü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);
};
}Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Aşağıdakilerden hangisi bellek sızıntısına yol açar?
- Yerel değişken kullanımı
- const ile değişken tanımlamak
- Kullanılmayan bir zamanlayıcının temizlenmemesi Doğru cevap
- arrow function kullanmak
Açıklama: Temizlenmeyen zamanlayıcı, referans tuttuğu sürece belleği canlı tutar.
2 Zamanlayıcıyı temizle
function stop() {
____;
timer = null;
}
function stop() {
clearInterval(timer);
timer = null;
}
Açıklama: setInterval ile kurulan sayacı clearInterval ile durdurursun.
3 Bellek terimlerini eşleştir
| Kavram | Anlamı |
|---|---|
garbage collection |
çöp toplama |
closure |
kapsamı canlı tutar |
WeakMap |
zayıf referans |
retained reference |
tutulan referans |