Rumah >hujung hadapan web >tutorial js >Kebocoran Memori Biasa dalam JavaScript

Kebocoran Memori Biasa dalam JavaScript

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-08 14:35:40920semak imbas

Common Memory Leaks in JavaScript

1. Pembolehubah Global

Pembolehubah global kekal sepanjang hayat aplikasi dan jarang sampah dikumpul. Apabila pembolehubah tidak skop yang sesuai, ini boleh menyebabkan kebocoran memori secara tidak sengaja.

function myFunc() {
    globalVar = "I'm a memory leak!";
}

2. Nod DOM terpisah

Nod DOM yang dialih keluar boleh kekal dalam ingatan jika dirujuk dalam JavaScript, walaupun tidak lagi dipaparkan.

let element = document.getElementById("myElement");
document.body.removeChild(element); // Node removed but still referenced

3. Pemasa dan Panggilan Balik

setInterval dan setTimeout mengekalkan rujukan kepada panggilan balik dan pembolehubah, yang berpotensi menyebabkan kebocoran memori dalam aplikasi yang berjalan lama.

let intervalId = setInterval(() => {
    console.log("Running indefinitely...");
}, 1000);

// Clear when no longer needed
clearInterval(intervalId);

4. Penutupan

Penutupan secara tidak sengaja boleh mengekalkan rujukan kepada pembolehubah daripada fungsi luarnya, yang membawa kepada isu ingatan.

function outer() {
    let bigData = new Array(100000).fill("data");
    return function inner() {
        console.log(bigData.length);
    };
}

Di sini, inner memegang bigData walaupun ia tidak diperlukan lagi.

Strategi untuk Mencegah dan Membetulkan Kebocoran Memori ?

1. Minimumkan Pembolehubah Global

Gunakan skop setempat (fungsi atau blok) untuk pembolehubah bagi mengelakkan kegigihan memori yang tidak perlu.

2. Kosongkan Rujukan kepada Nod DOM Terpisah

Pastikan pembolehubah yang merujuk nod DOM yang dialih keluar ditetapkan kepada null.

document.body.removeChild(element);
element = null; // Clear the reference

3. Urus Pemasa dan Pendengar Acara

Sentiasa kosongkan pemasa dan alih keluar pendengar acara apabila ia tidak diperlukan lagi, terutamanya dalam aplikasi dinamik satu halaman.

let timer = setInterval(doSomething, 1000);
// Clear when no longer needed
clearInterval(timer);

4. Elakkan Penutupan Besar Apabila Boleh

Meminimumkan skop penutupan atau kod penstrukturan semula untuk mengelakkan daripada mengekalkan struktur data yang besar tanpa perlu.


Saya harap anda dapati ia membantu. Terima kasih kerana membaca. ?
Mari berhubung! Anda boleh menemui saya di:

  • Sederhana: https://medium.com/@nhannguyendevjs/
  • Dev: https://dev.to/nhannguyendevjs/
  • Linkedin: https://www.linkedin.com/in/nhannguyendevjs/
  • X (dahulunya Twitter): https://twitter.com/nhannguyendevjs/
  • Beli Saya Kopi: https://www.buymeacoffee.com/nhannguyendevjs

Atas ialah kandungan terperinci Kebocoran Memori Biasa dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn