前端监控异常与SDK开发 | 青训营笔记

190 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第5天

本文主要介绍前端监控的四种常见异常、监控前端性能与异常、如何封装SDK。

前端监控

常见异常

静态资源错误

在拉取和加载静态资源的过程中,发生了预期之外的错误,如网络异常等,导致静态资源无法正常渲染到页面上。

  • 静态资源:加载页面所需的html、css和js等文件,以及其他各类多媒体文件,如图片、音频和视频等。

请求异常

请求响应状态码>=400,或者是通过异步请求拉取的静态资源错误。

  • Http请求状态码分类
    • 100-199 ————> 信息响应
    • 200-299 ————> 成功响应
    • 300-399 ————> 重定向消息
    • 400-499 ————> 客户端错误响应
    • 500-599 ————> 服务端错误响应
    • 0 ————> 请求无法执行(无法发送)
    • 请求成功率=请求成功数/(请求成功数+请求失败数)

JS错误

  • 在页面运行时,发生的JS错误,会严重影响页面的正常渲染与交互。

白屏异常

  • 前面三类异常可通过浏览器提供的标准化方法来监听到,而白屏异常通常可通过判断DOM树的结构来粗略判断白屏是否发生。
  • 导致白屏发生的原因可能有:
    • 发生JS错误,导致关键资源渲染失败
    • 请求异常或静态资源加载失败
    • 长时间的JS线程繁忙,阻塞渲染任务

监控性能

  • 性能指标监控
    • 利用Performance接口和PerformanceObserver,可监控到标准的渲染性能指标。
    • Performance:可获取到当前页面中与性能相关的信息,该类型的对象可通过调用只读属性Window.performance来获得。
    • PerformanceObserver:用于监测性能度量事件,在浏览器的性能时间轴记录新的performance entry时将会被通知。
  • 封装monitor
    • 起名字
    • 监听能力
    • 主动开启
    • 上报能力

监控异常

  • JS错误监控
    • 利用window.addEventListener的error和unhandledrejection,可监控到全局的JS错误。其中,会用到promise对象。
  • 静态资源错误监控
    • 利用window.addEventListener的error事件可监控到静态资源错误,注意要和JS error进行区分。
    • Window:error event :当资源加载失败或无法使用时,会在Window对象触发error事件。
  • 请求异常监控
    • 通过hook xhr和fetch对象来监听请求时发生的错误。除了关注请求错误,还需关注慢请求,在了解请求各阶段耗时中,找出所有慢请求。

封装一个通用的SDK

流程

graph TD
数据采集 --> 组装上报 --> 清洗存储 --> 数据消费

SDK主要完成数据采集组装上报这两步,后两步清洗存储数据消费则需要后端服务和平台的支持

数据上报

  • 封装一个用于给监控器上报已收集数据的上报函数

    function createXhrMonitor(report:({name:string,data:any})=>void

    实现report,需要一个专为前端监控打造的请求函数Navigator.sendBeacon(),用于通过HTTP POST 将少量数据异步传输到Web服务器。

按需加载监控能力

  • 将已实现的监控器按需加载到SDK中,从而封装成一个完整的SDK。

总结

分析前端监控异常,找出其中的原因,能够有效解决问题。学习如何封装好一个通用的SDK,实现基础功能,再加以优化,就可实现更多的功能。