#Frontend & Web UI
Debug Memory Leak trong Single Page Application bằng Chrome DevTools Memory Profiler
📖 2 phút đọc 💬 1 phản hồi
⚡ Tóm tắt 30 giây bởi TopDev AI
AI Overview Hiện tượng ứng dụng càng dùng lâu càng giật lag Trong các ứng dụng Single Page Application SPA, người dùng có thể mở tab và làm việc suốt 8 tiếng mà không hề F5 tải lại trang. Nếu mã nguồn có lỗi rò …
☰ Mục lục bài viết (4 phần) Mở / Đóng mục lục
Hiện tượng ứng dụng càng dùng lâu càng giật lag#
Trong các ứng dụng Single Page Application (SPA), người dùng có thể mở tab và làm việc suốt 8 tiếng mà không hề F5 tải lại trang.
Nếu mã nguồn có lỗi rò rỉ bộ nhớ:
- Tab trình duyệt ngốn từ 80MB lên tới 1.5GB RAM.
- Máy tính của người dùng bắt đầu hú quạt tản nhiệt, pin sụt nhanh.
- Trình duyệt crash với thông báo "Out of Memory".
Dưới đây là quy trình 3 bước sử dụng Chrome DevTools Memory Profiler để truy tìm thủ phạm rò rỉ bộ nhớ.
Quy trình chụp Heap Snapshot 3 bước#
- Bước 1 (Chụp Snapshot ban đầu): Mở Chrome DevTools $\rightarrow$ Tab Memory $\rightarrow$ Chọn Heap Snapshot $\rightarrow$ Bấm nút "Take snapshot" (Snapshot 1).
- Bước 2 (Thực hiện hành động nghi ngờ): Mở một Modal phức tạp, cuộn danh sách, rồi đóng Modal lại (lặp lại 3 lần để rác tích tụ).
- Bước 3 (Chụp Snapshot so sánh): Bấm "Take snapshot" lần 2 (Snapshot 2). Đổi chế độ xem từ Summary sang Comparison (So sánh giữa Snapshot 2 và Snapshot 1).
CODE
Xem cột # Delta (Số lượng object tăng thêm):
Nếu thấy Detached HTMLElement hoặc EventListener có số Delta > 0,
đó chính là rò rỉ bộ nhớ!
3 Thủ phạm Memory Leak phổ biến nhất trong React#
- Quên dọn dẹp Event Listener toàn cục:TYPESCRIPT
useEffect(() => { const handleResize = () => { /* ... */ }; window.addEventListener('resize', handleResize); // QUÊN RETURN HÀM CLEANUP: return () => window.removeEventListener('resize', handleResize); }, []); - Quên hủy subscription của WebSocket hoặc Interval: Luôn nhớ
clearInterval(timer). - Detached DOM Tree: Một biến JavaScript toàn cục vẫn giữ tham chiếu tới một phần tử DOM đã bị gỡ khỏi trang.
Góc thảo luận#
Anh em đã từng dùng tab Memory Profiler để bắt memory leak ở frontend bao giờ chưa? Ca leak khó nhằn nhất mà anh em từng gặp là gì?
Xem thêm nội dung liên quan:
Tác giả bài viết
Lan Anh (Senior Frontend)
Tham gia từ thg 6 2026 · 15 bài viết · 25 phản hồi
Thảo luận
1 phản hồi
💬
Tham gia thảo luận
Cộng đồng mở · Đăng nhập 1-chạm qua Google
Bài liên quan trong #Frontend & Web UI
-
Xây dựng Voice AI Agent thời gian thực với WebRTC và Whisper Live: Độ trễ dưới 500ms
Lan Anh (Senior Frontend) · 💬 1 -
Tối ưu SEO cho Website Client-Side Rendering: Dynamic Rendering vs Static Export
Lan Anh (Senior Frontend) · 💬 1 -
Viết Component Accessible (a11y) chuẩn WAI-ARIA: Giúp website thân thiện với mọi đối tượng
Lan Anh (Senior Frontend) · 💬 1 -
Deep-dive React 19 Actions và useActionState: Đơn giản hóa quản lý Form không cần thư viện ngoài
Lan Anh (Senior Frontend) · 💬 1 -
Server-Sent Events (SSE) vs WebSocket: Lựa chọn giao thức thời gian thực cho tính năng AI Streaming
Quốc Bảo (Fullstack Developer) · 💬 1