CodeBlanks Logo Icon CodeBlanks

Zamanlayıcı temizleme

JavaScript kursu · Orta seviye · Ders 64/134

Bir öğe kaldırıldığında zamanlayıcıyı temizleyerek bellek sızmasını önlemeyi öğrenirsin.

Bellek sızıntısı ve temizlik

Bir öğe sayfadan kaldırılsa bile üzerindeki zamanlayıcı çalışmaya devam edebilir. Bu, gereksiz bellek kullanımına yani bellek sızıntısına yol açar. Zamanlayıcıyı durdurmak için kimliğini saklamalı ve uygun anda clearInterval ya da clearTimeout çağırmalısın.

const id = setInterval(() => {
  console.log('Çalışıyor');
}, 1000);

// öğe kalkınca:
clearInterval(id);

Burada id saklanır ve öğe kaldırıldığında clearInterval(id) ile temizlik yapılır. Aksi halde callback, artık var olmayan öğeye erişmeye çalışır.

Olay işleyici içinde temizlik

Zamanlayıcı temizliğini olay işleyiciler içinde yapabilirsin. Örneğin bir durdurma butonuna tıklanınca clearInterval çağırırsın. Böylece kullanıcı zamanlayıcıyı istediği an durdurur.

const id = setInterval(() => {
  console.log('Çalışıyor');
}, 500);

stopBtn.addEventListener('click', () => {
  clearInterval(id);
});

Burada butona her tıklamada clearInterval(id) çağrılır ve zamanlayıcı durur. Aynı örüntü requestAnimationFrame için de geçerlidir; durdurmak istediğin an cancelAnimationFrame kullanırsın.

Uygulama Butona tıklanınca interval'i durdur

Aşağıdaki setInterval'e bir durdurma butonu ekle: #stop butonuna tıklanınca clearInterval(id) çağrılsın.

Örnek çözümü göster
const stopBtn = document.querySelector('#stop');
let count = 0;
const id = setInterval(() => {
  count = count + 1;
  console.log(count);
}, 500);
stopBtn.addEventListener('click', () => {
  clearInterval(id);
});

Kendini test et

  1. Aşağıdakilerden hangisi bellek sızıntısına yol açar?

    • setInterval'in kimliğini saklamak
    • clearInterval çağırmamak
    • const yerine let kullanmak
    • arrow fonksiyon kullanmak
    Cevabı göster

    clearInterval çağırmamak — Doğru! clearInterval çağrılmazsa zamanlayıcı çalışmaya devam eder ve bellek sızar.

  2. Temizlik satırını tamamla

    const id = setInterval(() => {
      counter.textContent = count;
    }, 1000);
    
    // öğe kaldırıldığında:
    ____(id);
    Cevabı göster
    const id = setInterval(() => {
      counter.textContent = count;
    }, 1000);
    
    // öğe kaldırıldığında:
    clearInterval(id);
  3. Temizlik örüntülerini eşleştir

    clearInterval(id)
    tekrarlı zamanlayıcıyı durdurur
    clearTimeout(id)
    tek seferlik zamanlayıcıyı iptal eder
    cancelAnimationFrame(id)
    animasyon karesini iptal eder
    stopBtn.addEventListener('click', ...)
    butona tıklanınca temizlik yapar

Orta seviye bölümündeki tüm dersler