Web 和小程序等前端真实体验监控服务
SDK 提供一个 hook 来帮助用户在日志上报前对日志进行屏蔽和修改,可以使用 beforeRequest,返回 false 就可以不上报该条日志,返回修改过后的 data 就可以实现对上报数据的修改。
beforeRequest
SDK 通过劫持 fetch 和 xhr 的方式实现对接口的测速,在请求前和请求后分别进行打点测速,因为 JS 计算时间差的逻辑依赖 js 主线程执行,如果 end 时间执行的时候有线程阻塞,会导致实际计算的时长要大于浏览器 network 时长。
webvitals 中 CLS 的值必须是页面可见性改变的时候才计算的,用户刷新页面的时候,如果选中了 Preserve log,就会有一条请求处理发送中,但恰好被页面刷新给 cancel 掉,就出现这种情况。对用户和数据没有影响,可以忽略。
监听页面打开 3s 内的首屏 DOM 变化,并认为 DOM 变化数量最多的那一刻为首屏框架渲染完成时间(SDK 初始化后 setTimeout 3s 收集首屏元素,由于 JS 是在单线程环境下执行,收集时间点可能大于 3s)。