用响应式状态实现性能监控插件,关键是将浏览器原生性能指标封装为可追踪、可计算、可自动更新的响应式数据源并绑定展示层;通过 Reactive 类管理依赖,定时采集内存、FPS、FCP、长任务等指标,配合 effect、computed 和事件钩子实现轻量实时监控。

用响应式状态实现性能监控插件,关键是把浏览器原生性能指标(如内存、FPS、网络延迟)变成可追踪、可计算、可自动更新的响应式数据源,再绑定到界面展示层。不需要复杂框架,纯 JavaScript 就能搭出轻量可靠的实时监控能力。
核心指标采集与响应式包装
先从 performance.memory、performance.getEntriesByType('navigation') 和自定义 FPS 计算器中提取关键值,并用 Proxy 或 reactive 类封装:
- 内存使用率:取
usedJSHeapSize / totalJSHeapSize,每 2 秒采样一次 - FPS:用
requestAnimationFrame统计每秒帧数,滑动窗口取均值(避免瞬时抖动) - 首屏加载耗时:监听
load事件后读取performance.getEntriesByName('first-contentful-paint')[0]?.duration - 主线程阻塞时间:通过
performance.getEntriesByType('longtask')累加最近 5s 的长任务总时长
构建响应式状态对象
用一个轻量 Reactive 类统一管理依赖和更新,例如:
const perfState = new Reactive({
memoryUsage: 0,
fps: 60,
fcp: 0,
longTaskMs: 0
});
// 每次更新指标时只需赋值
setInterval(() => {
perfState.memoryUsage = getMemoryUsage();
perfState.fps = getCurrentFPS();
}, 2000);
所有读取 perfState.memoryUsage 的地方(比如 DOM 渲染函数或图表更新逻辑)会自动加入依赖列表;一旦数值变化,就触发对应更新函数——无需手动调用 render()。
绑定到 DOM 或图表展示
指标有了,下一步是“活”起来地显示:
- 文字类指标:用
effect包裹 DOM 更新逻辑,例如effect(() => { elFps.textContent = perfState.fps + 'fps'; }) - 趋势图表:用 ECharts 时,把
perfState.fps推入时间序列数组,再调用chart.setOption({ series: [...] })—— 响应式系统会确保只在真实变化时重绘 - 阈值告警:对
perfState.memoryUsage > 0.8这类判断,直接写进computed或副作用里,自动联动样式变色或弹出提示
轻量集成与运行时控制
插件应支持按需启用/暂停,避免长期运行拖慢页面:
- 提供
start()/stop()方法,控制定时采集器和 RAF 循环 - 默认关闭内存监控(因部分浏览器不暴露
performance.memory),检测可用后再激活 - 支持传入容器元素,如
new PerfMonitor({ target: document.getElementById('perf-panel') }) - 暴露
on('memory-high', handler)等事件钩子,方便业务层扩展逻辑










