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 жана башка).
- Чет өлкөлүк китепканалардан чыгуу:
- Документацияны же китепканалардын кодуна көз жүгүртүп, потенциалдуу көйгөйлөрдү текшерүү.
Түзөтүү:
- Окуялар жана таймерлерди жокко чыгарыңыз: Бардык иш-чара иштетүүчүлөрү ажыратылган жана таймерлер тазаланганына ишенүү керек, компонент же объект жок кылынганда.
// Туура таймерди тазалоо
const leakyObject = {
data: 'кээ бир маалымат'
};
let timerId;
function startTimer() {
timerId = setInterval(() => {
console.log(leakyObject.data);
}, 1000);
}
function stopTimer() {
clearInterval(timerId); // Таймерди тазалоо
}
- Шилтемелерди нөлгө коюу: Жеке чоң же колдонулбаган объекттердин шилтемелерин ачык нөлгө коюу, жыйноочу алардын чогулушуна мүмкүндүк берүү үчүн.
WeakMapжанаWeakSetколдонуу: Жогорку күчтүү шилтемелер жок учурда, жыйноочу тарабынан жоголуп кетүүчү объекттердин шилтемелерин сактоо үчүн.- Маалымат структураларын оптималдаштыруу: Эффективдүү структураларды же ыкмаларды колдонуу (мисалы, ленив жүктөө).
- Кэштердин өлчөмүн чектөө: Чыгуу стратегияларын киргизүү.
- Китепканаларды жаңыртуу же алмаштыруу: Эгер көйгөй сырттан келген китепканадан болсо, аны жаңыртуу же альтернативаны табуу.
Өзгөртүүдөн кийин, кайра иштеп чыгуу куралдарын колдонуп, чыгуу жоктугун тастыктаңыз.