← 返回题目列表

前端性能回归如何定位?上线后突然变慢怎么办?

困难 第 28 / 29 题 更新于 2026/07/29
前端性能性能回归排查监控

简化版

前端性能回归定位要先确认变慢范围,再定位指标和变更。常见流程是:看 RUM 监控确认哪些页面、地区、设备、浏览器变慢;看变慢指标是 LCP、INP、CLS、TTFB 还是资源加载;对比上线版本、资源体积、接口耗时、第三方脚本和错误率;必要时回滚或灰度止损。定位要把“什么时候开始变慢”和“那时发布了什么”对齐。

详细版

性能回归不是盲目优化,而是缩小范围。

现象可能方向排查工具
LCP 变慢图片、首屏接口、CSS、TTFBRUM、Network、Performance
INP 变差长任务、事件处理、框架渲染Long Tasks、Performance
CLS 变差图片尺寸、广告、字体、异步插入Layout Shift 记录
TTFB 变慢服务端、CDN、网络Server log、APM、CDN 日志
确认范围 → 锁定指标 → 对齐发布时间 → 对比资源/接口/脚本 → 复现 → 止损 → 修复验证

性能回归最怕凭感觉改代码,正确姿势是先把时间线、指标和版本对齐。

完整版教学

一、第一步先确认是不是回归

用户反馈“页面变慢”不一定代表全量回归。可能是某个地区网络问题、某个浏览器版本问题、某个接口偶发慢,也可能是样本量太小。

先看监控趋势:变慢是否持续、是否超过正常波动、是否集中在某些页面或用户分组。

二、按指标拆问题

不同指标变差,对应方向完全不同。

  • LCP 变差:主内容出现慢,重点看 TTFB、首屏资源、LCP 元素加载和渲染。
  • INP 变差:交互响应慢,重点看长任务、事件处理和渲染更新。
  • CLS 变差:页面跳动,重点看尺寸占位、字体、广告和异步插入。
  • TTFB 变差:首字节慢,重点看服务端、CDN、缓存和网络。

三、按维度缩小范围

RUM 数据要分组看:

维度价值
页面路径判断是否某个页面变慢
版本号判断是否某次发布引入
设备等级判断是否低端设备受影响
网络类型判断是否弱网放大问题
地域/CDN 节点判断是否边缘节点异常
浏览器判断是否兼容性问题

如果只有低端 Android INP 变差,方向就不该放在 CDN;如果所有地区 TTFB 同时变差,就要看服务端和缓存。

四、对齐发布和资源变化

性能回归常和发布相关。要对比上线前后:

  • JS/CSS 体积是否增长。
  • 首屏 chunk 是否多了依赖。
  • 图片是否变大或格式变化。
  • 第三方脚本是否新增。
  • 接口数量或瀑布顺序是否变化。
  • 框架渲染次数是否增加。
npm run build
npx source-map-explorer dist/assets/*.js

如果构建产物变化明显,优先看依赖和拆包。

五、复现和止损

如果影响范围大,要先止损:回滚、关闭开关、下掉第三方脚本、降级非关键模块或切回旧资源。

复现时用和问题用户相近的条件:设备降速、网络限速、对应地区代理、清缓存和指定浏览器版本。

六、修复后要验证

修复不是本地看起来快就结束。要看:

  • Lab 指标是否恢复。
  • RUM 分位数是否回落。
  • 错误率是否变化。
  • 业务指标是否恢复。
  • 是否引入新的视觉或功能问题。

七、常见误区与追问

  • 误区:性能变慢就先压缩 JS。 不同指标对应不同瓶颈,TTFB 慢时压 JS 可能没用。
  • 误区:只看平均值就能判断回归。 平均值可能掩盖低端设备或弱网用户的问题。
  • 误区:本地无法复现就说明没问题。 真实用户环境复杂,要按设备、网络、地区和版本分组分析。
  • 追问:如何快速止损? 回滚、灰度关闭开关、禁用非关键第三方脚本或切换旧资源。
  • 追问:怎么判断是前端还是后端问题? 看 TTFB、资源下载、主线程任务和接口耗时分布。
  • 追问:Source Map 对性能排查有什么用? 可以把产物体积和执行栈映射回源码模块,定位新增依赖或重代码。

八、加强记忆

性能回归定位记成“范围、指标、版本、证据”。先确认谁慢,再看慢在哪个指标,然后对齐发布时间和变更,最后复现、止损、修复、线上验证。