把每次前端渲染性能提升当作一次可追溯的实验:变更前记录基线指标与页面状态,变更中只改一个主要变量,变更后用同一套方法复测并写下结论。时间和人手有限时,先处理影响首屏渲染、交互响应且改动成本低的问题,再按记录结果决定是否继续深入。
记录之前先确定观察对象,避免复盘时只剩“感觉快了”。前端渲染性能通常可以从三类信号入手:
观察工具可以分层使用:浏览器开发者工具的性能面板适合定位单次卡顿;Lighthouse 一类审计工具适合形成可重复的基线;真实用户监控适合看不同设备与网络下的分布。三者用途不同,不能互相替代。记录时要写清设备、网络条件、页面路径、登录状态和构建版本,否则两次数据没有可比性。
一份能支撑复盘的变更记录,至少包含以下字段:
如果一次改动同时涉及代码拆分、图片格式和缓存策略,复盘时就无法判断哪一项起了作用。人手有限时更应控制变量,一次只推进一个主要改动,其余调整留到下一轮。
观察:先复现问题,用性能面板录一段操作过程,确认卡顿发生在渲染、脚本执行还是网络请求阶段。不要一上来就改代码。
判断:根据录制结果列出可能原因。例如长任务集中在某个组件挂载时,可能是同步计算过多;首屏空白时间长,可能是关键资源加载顺序不合理;滚动时频繁掉帧,可能是列表项全量渲染。一个现象往往有多种解释,先写下两三个候选原因,再用数据排除,而不是认定唯一原因。
处理:选择改动小、验证快的一项先做。例如把非首屏组件改为延迟加载,或把长列表改为分批渲染。处理时同步更新变更记录,写清改了什么、为什么这样改。
复查:用与基线相同的设备和条件复测,对比同一指标。若指标改善且没有新增报错,可以保留;若没有变化,检查假设是否成立,而不是继续叠加改动。
下面是一个假设示例,用来展示记录粒度,数值仅作格式说明:
页面:/list;设备:中端手机;网络:4G 模拟;基线:交互到下一次绘制 320ms;假设:列表项一次性渲染导致主线程长任务;改动:改为每屏渲染 20 项;复测:交互到下一次绘制 180ms;结论:假设成立,保留改动;遗留:滚动到底部时仍有轻微延迟,下轮观察。
复查时建议同时看三项:目标指标是否改善、是否出现新的长任务或报错、其他页面是否被影响。只盯一个数字容易把问题转移到别处。如果改动导致构建体积明显增加或首屏资源变多,即使某个交互指标变好,也要重新评估是否值得保留。
优先级可以按“影响面 × 验证成本”排序:影响首屏和主要交互、且能用现有工具快速复测的改动排前面;只影响边缘页面、复测需要复杂环境搭建的排后面。每轮结束后花几分钟更新记录,把有效改动和无效假设分开归档。无效假设同样有价值,它能避免下次重复尝试。
下一步,选一个当前最常被用户抱怨的页面,按上面的字段建立一条基线记录,再挑一个最小改动执行并复测。得到第一轮结果后,再决定是否扩大改动范围。