Sobes.tech
Middle

Кодуңузда эс тутумдун агып кетишин кантип оңдойсуз?

sobes.tech AI

AIден жооп

Сиз браузердин иштеп чыгуу куралдары (Timeline / Performance, Memory) аркылуу чыгуу булагын аныктай аласыз.

Жалпысынан кездешүүчү эс тутумунун чыгуу себептери:

  • Объекттерге байланышкан байланыктар:
    • Унутулуп калган таймерлер (setInterval, setTimeout), алар объекттерге шилтеме кылат.
    • Анык эмес иш-чара иштетүүчүлөрү, алар ажыратылган эмес (removeEventListener).
    • Чегерүүлөр, тышкы өзгөрмөлөрдү керек болгонго караганда узак сактайт.
    • Документтен алынган DOM элементтери, бирок алардын шилтемелери JavaScriptте калган.
// Унутулуп калган таймерден улам чыгуу мисалы
const leakyObject = {
  data: 'кээ бир маалымат'
};

setInterval(() => {
  console.log(leakyObject.data); // leakyObject жыйноочу жыйноочу тарабынан чогулбайт
}, 1000);
  • Ири маалымат структуралары:
    • Аралаш жана сакталган өтө чоң массивдер же объекттер, эгерде итераторлор же стриминг колдонсо болот.
  • Кэштерди туура эмес колдонуу:
    • Кэштер, алар чексиз өсүп жатат, чыгуу стратегиясы жок (LRU, LFU жана башка).
  • Чет өлкөлүк китепканалардан чыгуу:
    • Документацияны же китепканалардын кодуна көз жүгүртүп, потенциалдуу көйгөйлөрдү текшерүү.

Түзөтүү:

  1. Окуялар жана таймерлерди жокко чыгарыңыз: Бардык иш-чара иштетүүчүлөрү ажыратылган жана таймерлер тазаланганына ишенүү керек, компонент же объект жок кылынганда.
// Туура таймерди тазалоо
const leakyObject = {
  data: 'кээ бир маалымат'
};
let timerId;

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

function stopTimer() {
  clearInterval(timerId); // Таймерди тазалоо
}
  1. Шилтемелерди нөлгө коюу: Жеке чоң же колдонулбаган объекттердин шилтемелерин ачык нөлгө коюу, жыйноочу алардын чогулушуна мүмкүндүк берүү үчүн.
  2. WeakMap жана WeakSet колдонуу: Жогорку күчтүү шилтемелер жок учурда, жыйноочу тарабынан жоголуп кетүүчү объекттердин шилтемелерин сактоо үчүн.
  3. Маалымат структураларын оптималдаштыруу: Эффективдүү структураларды же ыкмаларды колдонуу (мисалы, ленив жүктөө).
  4. Кэштердин өлчөмүн чектөө: Чыгуу стратегияларын киргизүү.
  5. Китепканаларды жаңыртуу же алмаштыруу: Эгер көйгөй сырттан келген китепканадан болсо, аны жаңыртуу же альтернативаны табуу.

Өзгөртүүдөн кийин, кайра иштеп чыгуу куралдарын колдонуп, чыгуу жоктугун тастыктаңыз.