前端性能监控-错误收集

820 阅读1分钟

前言

本文只对错误收提供一些思路,对于具体的实现不做具体的讨论。

页面错误类型

页面错误大致可以分为三种:

  • 资源加载错误
  • Ajax请求错误
  • JS运行报错

资源加载错误

资源加载错误主要包含:imglinkscript 这三类错误。

对于上面这三种常规资源报错通过 window.addEventListener('error', handler, true) 监听。

但是,假如错误收集的JavaScript代码运行前,资源报错该怎么处理?可以引入提前监听的方式来收集,必须要将下面这段代码放到所有资源引用之前,这样我们在处理错误收集的逻辑时,可以对 __sourceError 中保存的错误做处理。

<script type="text/javascript">
    window.addEventListener("error", function (e) {
    var elem = e.target;
    if(elem.tagName && /img|script|link/.test(elem.tagName.toLowerCase())){
            window.__sourceError = window.sourceError || [];
            window.__sourceError.push(e);
        }
    }, true);
</script>

数据收集

对于这类错误,我们可以收集这些数据:

  • 发生错误的页面网址
  • 资源开始加载的时间
  • XPath页面元素定位符
  • 加载失败的元素url
  • 资源发生错误的 base URL网址
  • ...

Ajax请求错误

对于ajax请求错误的监控,我们可以重写 XMLHttpRequest 来实现。

对于 fetch 请求,只重写 XMLHttpRequest 是不会生效的,我们需要重写 fetch 方法。

数据收集

对于这类错误,我们可以收集这些数据:

  • ajax请求地址
  • ajax请求方法
  • ajax请求时间
  • 响应的status状态码
  • ajax响应的内容
  • ajax响应的时间
  • ...

JS运行报错

  • 监听 window.onerror
  • window.addEventListener('unhandledrejection', handler, true)
  • Catch Vue Error

数据收集

对于这类错误,我们可以收集这些数据:

  • 发生错误JS文件url
  • JS错误名称
  • JS错误message信息
  • JS发生错误的行号
  • JS发生错误的列号
  • JS错误堆栈信息
  • ...