掘力计划第25期 前端研发全流程的性能监控实践

2022年9月23日,字节跳动在北京举办了掘力计划第25期"性能专场"技术沙龙。本次活动的主题是《前端研发全流程的性能监控实践》,由字节跳动架构前端 APM 团队的李俊安和嵇晓濛两位讲师进行分享。

长期以来,对前端监控的理解局限于对线上应用进行数据采集和监控,以便及时发现问题。但随着业界对应用质量和稳定性要求越来越高,仅仅依靠线上监控已然不能满足需求。因此,业内开始探索在研发流程中"左移"监控点,使质量监控覆盖更早的开发阶段。

视频回放:juejin.cn/live/jpower...

研发流程左移的动机

李俊安讲师首先解析了典型的研发流程,包含计划、开发、测试、构建、部署、全量发布、灰度发布、监控等8个节点。过去,监控节点主要位于全量发布之后,意味着问题往往已经暴露给大批用户,无法避免对用户造成影响。

随着业务团队对端监控能力要求不断提高,对应用质量和稳定性的需求也在提升。这要求端监控能力需要从简单的线上监控,逐步向研发流程的更早阶段扩展。业界传统的端监控集中在全量发布之后,一旦出现问题就已经影响到大量用户。为了能够尽早发现问题、减小问题影响,需要将监控点逐步左移。

首先可以从全量发布后左移到灰度发布,在小流量环境下测试新版本。再进一步可以左移到持续集成环节,在交付过程中的各个节点实施监控,对问题 adoption 采取措施。这对应了业务团队的诉求,从最初简单追求尽早发现问题,到关注降低问题影响范围,最后希望能够防患于未然、杜绝低级错误反复出现。

从全量发布到灰度发布

相比日常监控,灰度监控有自己的特点。嵇晓濛介绍了灰度监控的3个关键点:

  • 区分灰度流量数据:在数据采集时通过版本号标记灰度数据,在后续处理中以版本号筛选。

  • 按比例调整报警阈值:根据灰度比例动态调整报警阈值,保证敏感度。还可以通过复合指标监控灰度放量异常。

  • 关注版本引入的新问题:主要通过核心业务链路指标、异常指标发现问题,辅以性能指标。

技术实现上,主要是在数据采集时打标签,后续处理和报警以标签区分灰度数据。此外,监控灰度覆盖率指标以确保放量正常。另外,设计了动态报警阈值机制,可以根据不同的灰度放量比例来调整报警触发阈值。

报警之外,还可以在监控看板上设计多指标联动观测,比如同时观察灰度版本的错误率和所有版本的错误率,判断是否存在明显差异。如果放量比例不精确,可以通过设计复合指标来动态适应。

针对灰度监控的指标选取,要优先关注稳定性问题,如核心业务链路的异常、JS 错误、网络请求错误等高优先级指标。同时要关注灰度放量本身的异常,确保放量符合预期。

从上线后到上线前

嵇晓濛讲师提到,即便我们能通过灰度监控能力减少问题影响的范围,也不可避免地将问题直接暴露给了部分用户。我们如何在上线前就发现和拦截问题,不让这些问题直接暴露到用户面前呢?

1. 页面快照与端到端测试:预览环境的模拟验证

为了避免将缺陷及性能问题暴露给用户,我们将监控能力左移到上线前的节点,即持续测试阶段,在测试环境或预览环境就对应用做一次全面的体检。

具体来说,可以采用以下措施:

  • 使用基于 Lighthouse 的线下性能分析能力,Lighthouse 可以分析网页首屏加载、渲染、运行时的性能瓶颈。

  • 通过平台化手段增强 Lighthouse 的归因能力和跨版本追踪能力,可以更好地定位性能瓶颈。

  • 使用基于 Puppeteer 的端到端测试。通过编写业务核心链路的交互流程,自动化测试不同场景下应用的性能。

2. 产物分析:分析打包产物对应用的影响

除了页面交互外,构建产物本身也会对性能产生很大影响。所以我们将监控继续左移到了持续集成阶段,对构建产物进行分析:

  • 收集 Webpack、ESBuild、Rollup 等构建工具产生的构建信息。
  • 增加产物信息的跨版本追踪、报警等能力。
  • 引入规范,给出产物优劣的评判结果。
  • 从多个维度分析产物对性能的影响,如文件体积、重复依赖等。

通过上述措施,我们能在上线前发现绝大部分问题,最大限度地减少问题对用户的影响。

总结

通过逐步左移监控点,可以在更早开发阶段发现问题,有效防止缺陷暴露给用户,提高产品质量。线下性能分析的能力已经被集成到开源平台 perfsee.com 中,供更多团队使用。本次分享从研发流程的全局视角审视端监控,分享了许多可操作的方式来提升应用性能,对于其它前端团队也具有很好的借鉴意义。

掘力计划

掘力计划由稀土掘金技术社区发起,致力于打造一个高品质的技术分享和交流的系列品牌。聚集国内外顶尖的技术专家、开发者和实践者,通过线下沙龙、闭门会、公开课等多种形式分享最前沿的技术动态。

相关推荐
崔庆才丨静觅3 分钟前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60611 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了1 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅1 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅1 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅2 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment2 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅2 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊2 小时前
jwt介绍
前端
爱敲代码的小鱼2 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax