主动清理performancemark可防内存泄漏和数据误读:清空全部用performance.clearmarks(),按名清理用performance.clearmarks('name'),按前缀批量清理用performance.clearmarks('prefix-'),推荐在组件卸载、异步完成或新请求前执行。

直接调用 performance.clearMarks() 就能清空所有已记录的标记,但“实时回收”和“保持内存清爽”不是简单一清了之——关键在**何时清、清哪些、为什么不清会出问题**。
为什么要主动清理标记?
Performance API 的标记(PerformanceMark)会持续保留在内存中,直到被显式清除或页面卸载。在单页应用(SPA)中反复路由、组件挂载/卸载,若不清理,同名标记可能堆积(比如多次触发 performance.mark('search_submit')),导致 getEntriesByName() 返回数组变长、取 [0] 拿到旧值;更严重的是,大量冗余标记会占用可观内存,尤其在长期运行的管理后台或仪表盘中。
clearMarks() 的三种实用清理方式
它支持灵活入参,按需释放,不是只有“全删”一种选择:
-
清空全部标记:
performance.clearMarks()—— 适合页面级重置,如用户登出、刷新视图、或测试环境每次用例跑完后兜底清理 -
按名称精确清理:
performance.clearMarks('api-fetch-start')—— 推荐用于关键路径收尾,比如请求完成回调里立刻清除起始标记,避免后续误读 -
按前缀批量清理:
performance.clearMarks('cart-')—— 最实用的业务模式。给同一业务链路的标记统一加前缀(如'cart-submit-begin'、'cart-submit-api-end'),流程结束时一句即可清掉整条链,安全又省心
清理时机比清理动作更重要
别等标记堆满才想起来清。真正有效的“实时回收”,是把清理嵌入业务生命周期:
- 在 Vue/React 组件
unmounted或useEffect cleanup中调用clearMarks('component-name-') - 在异步操作完成(无论成功或失败)的 finally 块里,清理该次请求关联的所有标记
- 对高频操作(如搜索框输入 debounce 后的请求),每次新请求发起前先清掉上一轮残留标记,防止
getEntriesByName('search')拿到陈旧数据
兼容性与兜底提醒
IE11 支持 mark() 但不支持 clearMarks()。若需兼容,可自行维护一个标记名白名单数组,在打点时 push 名称,清理时遍历调用 clearMarks(name)(IE 下静默忽略即可);现代浏览器中无需此层封装。另外,构建工具(如 Terser)可能把无副作用的 clearMarks() 当作死代码删掉,建议加个空操作兜底:performance.clearMarks('xxx'); void 0;。










