Sobes.tech
Middle

Kodunuzda yaddaş sızmasını necə düzəldərdiniz?

sobes.tech Süni İntellekt

AI-dan cavab

Brauzerin inkişaf vasitələrindən (Timeline / Performance, Memory) istifadə edərək sızma mənbəyini müəyyən edərdinizmi?

Yaddaş sızmalarının ümumi səbəbləri:

  • Obyektlərə asılı qalmış referanslar:
    • Unudulmuş zamanlayıcılar (setInterval, setTimeout) obyektlərə istinad edir.
    • Aydın olmayan hadisə idarəediciləri, onlar ayrılmayıb (removeEventListener).
    • Xarici dəyişənləri daha uzun müddət saxlayan bağlamalar.
    • Sənəddən silinmiş DOM elementləri, lakin JavaScript-də referanslar qalıb.
// Unudulmuş zamanlayıcı səbəbindən sızma nümunəsi
const leakyObject = {
  data: 'some data'
};

setInterval(() => {
  console.log(leakyObject.data); // leakyObject toplanmayacaq
}, 1000);
  • Böyük məlumat strukturları:
    • Döngü və ya axın ilə həll edilə biləcək çox böyük massivlər və ya obyektlər yaratmaq və saxlamaq.
  • Keshlərin düzgün istifadə olunmaması:
    • Sonsuz böyüyən keshlər (LRU, LFU və s.)
  • Xarici kitabxanalardan sızmalar:
    • Kitabxanaların sənədlərini və ya mənbə kodunu potensial problemlər üçün yoxlayın.

Həll:

  1. Hadisələri və zamanlayıcıları ləğv edin: Bütün hadisə idarəedicilərinin ayrıldığından və zamanlayıcıların təmizləndiyindən əmin olun.
// Düzgün zamanlayıcı təmizləmə
const leakyObject = {
  data: 'some data'
};
let timerId;

function startTimer() {
  timerId = setInterval(() => {
    console.log(leakyObject.data);
  }, 1000);
}

function stopTimer() {
  clearInterval(timerId); // Zamanlayıcıyı təmizləyin
}
  1. Referansları null edin: Böyük və ya istifadə olunmayan obyektlərə referansları açıq şəkildə null edin ki, toplayıcı onları toplaya bilsin.
  2. WeakMapWeakSet istifadə edin: Toplayıcı tərəfindən silinə bilən obyektlərə referans saxlamaq üçün.
  3. Məlumat strukturlarını optimallaşdırın: Daha səmərəli strukturlar və ya yanaşmalar istifadə edin (məsələn, tənbəl yükləmə).
  4. Keshlərin ölçüsünü məhdudlaşdırın: Çıxarılma strategiyalarını tətbiq edin.
  5. Kitabxanaları yeniləyin və ya dəyişdirin: Əgər problem xarici kitabxanada isə, onu yeniləyin və ya alternativ tapın.

Təmir etdikdən sonra, sızma olmadığını təsdiqləmək üçün inkişaf vasitələrindən istifadə edin.