chrome 120+ 中 memory 面板需手动启用,录制需勾选 js heap size、documents、dom nodes;堆快照应切换 retainers 视图查 closure/eventlistener;对比快照前须手动 gc,关注 delta 列而非 # new。

Memory 面板打不开或没有“堆快照”选项
Chrome 120+ 版本已将 Profiles 面板彻底移除,Memory 面板现在是独立入口,但默认可能被隐藏。必须手动打开:按 Ctrl+Shift+I(Win/Linux)或 Cmd+Option+I(macOS)唤出 DevTools → 点击右上角 ⋯ → More tools → 勾选 Memory。如果仍不显示,检查是否在“隐身模式”下运行(部分插件会干扰面板加载)。
录制 Memory Timeline 时内存曲线没变化
常见原因是没勾选关键采集项。打开 Memory 面板后,必须先点击左上角的 Record 按钮旁的齿轮图标,确保以下三项全部启用:JS heap size、Documents、DOM nodes。漏掉 DOM nodes 就无法识别 Detached DOM 泄漏;不勾 JS heap size 则看不到 GC 后内存是否回落。另外,录制时间建议 ≥10 秒,且中间要包含至少一次完整操作闭环(如:打开弹窗 → 执行动作 → 关闭弹窗)。
堆快照里找不到泄漏对象的引用链
堆快照默认只显示“可访问对象”,即能从全局作用域(window、globalThis)一路追溯到的对象。很多泄漏其实藏在闭包或事件监听器内部,需要主动展开:Retainers 列点击三角箭头 → 查看“Shallow size”异常大的对象 → 在右侧 References 面板中切换视图模式为 Retainers(不是默认的 References)→ 重点找带 closure、EventListener、timer 字样的条目。若看到 system / Context 下挂载大量同名函数,大概率是未清除的 setInterval 或闭包强引用。
对比两个快照时“# New”列全是 0
说明两次快照之间没有新增存活对象,但不代表没泄漏——可能是泄漏对象在第一次快照前就已存在,或已被 GC 回收。正确做法是:首次快照(Baseline)在页面空闲、无交互后 5 秒拍摄;第二次快照在重复触发疑似泄漏操作(如打开/关闭同一组件 3 次)后立即拍摄;第三次快照在强制 GC 后(DevTools 控制台执行 if (window.gc) window.gc())再拍。真正有效的泄漏线索藏在 Delta 列持续增长的 Detached DOM tree 或 Closure 类型上,而不是 # New。
实际排查中最容易被跳过的一步,是忘记在每次快照前手动触发 GC —— V8 不保证立刻回收,而 Memory 面板的快照默认从 GC 后开始记录,这会导致你看到的“已释放”其实是假象。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











