项目背景
在现代前端开发中,内存管理往往被开发者忽视,直到页面崩溃的那一刻。本项目是一个专门设计用来演示前端内存溢出问题的可视化工具,它通过模拟后台持续推送大数据量的场景,展示了内存如何从初始的几十 MB 迅速增长到 4GB+,最终导致 Chrome 标签页崩溃。
Chrome DevTools 查找未释放内存
Chrome DevTools 内存泄漏检测实战指南:Heap Snapshot 对比法
核心原理:Heap Snapshot 对比法
Heap Snapshot(堆快照)对比法的核心思想是:
- 在关键操作点抓取内存快照
- 对比前后快照的差异
- 找出异常增长的对象和引用链
- 定位泄漏源头
在运行过程中点击推送数据前后内存进行对比

定位到没有关闭的定时器逻辑引发的内存泄露

内存溢出核心原理
1. 内存泄漏的根本原因
项目的核心问题代码位于 App.tsx 中:
// 数据存储 (故意不清理,就是为了演示内存泄露)
const allDataRef = useRef<DataRecord[]>([]);
// 执行一次推送
const doPush = useCallback(() => {
const cfg = configRef.current;
const batch = generateBatch(cfg);
// 故意不释放!所有数据堆积在 allDataRef 中
allDataRef.current.push(...batch);
}, [addLog]);
关键问题分析:
- 使用
useRef创建了一个持久化的引用allDataRef - 所有接收到的数据都通过
push方法追加到数组中 - 没有任何清理机制,数据会无限累积
- 即使组件重新渲染,这些数据仍然保留在内存中


