Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Loại bỏ Memory Leak (Rò rỉ bộ nhớ) trong JavaScript

Nguyên nhân chính leak trong ngôn ngữ GC: **unwanted references (tham chiếu không cần thiết)** — object không bao giờ trở thành unreachable.

Cơ chế GC: Mark-and-Sweep

  • Root: window (global object).
  • Duyệt đệ quy từ root, đánh dấu reachable.
  • Thu hồi unreachable.

4 loại leak thường gặp

1. Global variables vô tình

function test() { a = [1,2,3]; } // thiếu let/var/const
test(); console.log(a); // [1,2,3] — leak global scope

Sửa: Luôn dùng let/const/var.

2. Closures

Biến outer function bị giữ bởi inner function dù không dùng → không GC được.

3. Detached DOM / Out-of-DOM reference

Node DOM bị remove khỏi tree nhưng JS vẫn giữ reference → cả subtree không GC được. Luôn xóa reference JS khi done với DOM node.

4. Event Listeners

DOM element và listener lifecycle khác nhau → leak. Dùng removeEventListener hoặc {once: true} / AbortController.

Công cụ debug: Chrome DevTools → Memory tab → Heap snapshot / Allocation timeline.