A 前端监控
前端监控目标
稳定性
1)JS错误:执行错误&promise异常
1)资源错误:script/link等资源加载异常
1)接口错误 ajax/fetch请求接口异常
用户体验
1)加载时间
1)TTFB(首字节时间)
1)FP(首次绘制)
1)FCP(首次内容绘制)
1)FMP(首次有意义绘制)
1)FID(首次输入延迟):用户首次和页面交互到页面响应交互的时间
1)卡顿
业务
pv,uv,页面停留时间 等
前端监控流程
1)前端埋点
1)数据采集
1)数据建模存储
1)数据传输(实时/传输)
1)数据统计(分析/挖掘)
1)数据可视化反馈/报告和报警
RAIL测量模型
1)RAIL测量模型:Response 响应,给用户的响应体验、Animation 动画、Idle 空闲,主线程的空闲时间、Load 加载空闲
1)响应:处理事件应在50ms 以内完成
1)动画:每10ms产生一帧(60fps:一秒60帧,需考虑浏览器的绘制时间,大约6ms)
1)空闲:尽可能增加空闲时间
1)加载:在5s内完成内容加载并可以交互
B 错误捕获
1 脚本错误监控
1 | // ### 常规脚本错误 |
2 请求错误监控
axios: 在请求拦截器以及响应拦截器进行处理上报
3 资源错误监控
脚本错误参数对象 instanceof ErrorEvent
资源错误的参数对象 instanceof Event
ErrorEvent 继承于 Event
资源错误在捕获阶段被捕获1
2
3
4
5
6
7
8
9
10
11
12/**
* @param event 事件名
* @param function 回调函数
* @param useCapture 回调函数是否在捕获阶段执行,默认是false,在冒泡阶段执行
*/
window.addEventListener('error', (event) => {
if (event instanceof ErrorEvent) {
console.log('脚本错误')
} else if (event instanceof Event) {
console.log('资源错误')
}
}, true);
4 跨域脚本错误捕获
在 script 标签中,添加 crossorigin 属性;同时,配置 CDN 服务器,为跨域脚本配上 CORS(存在兼容性问题,crossorigin 属性对于 IE 以及 Safari 支持程度不高)
22:12
2020.10.22 星期四 14:32
C 性能指标
1 | var t; |
指标 | 计算方式 | 描述 | ||
---|---|---|---|---|
fcp | perfEntries[key].startTime.toFixed(0) * 1 | 首次内容绘制 | ||
tcp | t.connectEnd - t.connectStart | TCP 建立连接完成握手的时间 | ||
dns | t.domainLookupEnd - t.domainLookupStart | 0 | DNS 查询时间 | |
ttfb | t.responseStart - t.requestStart | Time to First Byte,读取页面第一个字节的时间 | ||
trans | t.responseEnd - t.responseStart | 内容加载完成的时间 | ||
dom | t.domInteractive - t.responseEnd | |||
res | t.loadEventStart - t.domContentLoadedEventEnd | |||
ssl | t.connectEnd - t.secureConnectionStart | |||
firstbyte | t.responseStart - t.domainLookupStart | |||
fp | var perfEntries = _performance.getEntries(); perfEntries[key].startTime.toFixed(0) * 1 > t.responseEnd - t.fetchStart | 首次绘制 | ||
tti | t.domInteractive - t.fetchStart | |||
ready | t.domContentLoadedEventEnd - t.fetchStart | |||
load | t.loadEventStart - t.fetchStart | |||
effectiveType | window.navigator.connection.effectiveType | 网络类型(草案) | ||
downlink | window.navigator.connection.downlink | 网络下行速度(草案) | ||
rtt | window.navigator.connection.rtt | 估算的往返时间(草案) | ||
platform | window.navigator.platform | 运行浏览器的操作系统和(或)硬件平台 | ||
rd | 如下 | 重定向耗时 |
// rd 计算1
2
3
4
5
6
7if (t.navigationStart !== undefined) {
pData.rd = t.fetchStart - t.navigationStart
} else if (t.redirectEnd !== undefined) {
pData.rd = t.redirectEnd - t.redirectStart
} else {
pData.rd = 0
}
C_补充 1 performance 属性说明
1 | performance = { |
通过这些属性, 能够计算出一些重要的网页性能数据
1 |
|
C_补 2 性能指标落地
1. 指标获取方式
1 | // ## (1)navigation相关: performance.getEntriesByType('navigation')[0] || performance.timing |
2. 通过上述方式获取到的指标及其含义
(1) navigation-time
(2) paint
performance.getEntriesByType(‘paint’) // 返回数组包含 [PerformancePaintTiming, PerformancePaintTiming]
分别为:first-contentful-paint, first-paint
PerformancePaintTiming : {duration: 0, entryType: "paint", name: "first-paint", startTime: 552.2650000057183 }
3. 常用分析指标及计算方式
dns, tcp, ttfb, trans,
dom, res, ssl, firstbyte, tti, ready, load,
fp, fcp, fmp, …
新的性能指标:LCP、TBT、CLS
最大内容渲染 (Largest Contentful Paint - LCP), 页面阻塞总时长(Total Blocking Time - TBT) 和 累积布局位移 (Cumulative Layout Shift - CLS) 代表了新一代的性能数据,这些指标将更加聚焦于用户真实体验,而不仅仅是初始化加载时间例如首次内容加载时间(FCP)和首次有意义内容加载(FMP)。