Skip to main content

前端监控

页面性能指标

页面性能指标是通过 performance.getEntriesByType('navigation')[0]performance.timing 来计算的,前者为最新计算方式,后者为旧版本计算方式。以下 navigationTiming 表示前者返回的值,timing 表示后者返回的值,没有指定,表示这两个对象中都包含该字段。

performance.getEntriesByType('navigation')[0] performance.timing

性能指标计算方式参考图: Timing attributes

重定向个数

指当前页面是经过几次重定向到达的,如果没有重定向,该值为 0

计算方式:navigationTiming.redirectCountperformance.navigation.redirectCount

重定向耗时

指重定向所用时间

计算方式:redirectEnd - redirectStart

读取缓存耗时

指读取缓存数据所用时间

计算方式:domainLookupStart - fetchStart

DNS解析耗时

指通过域名解析服务(DNS),将指定的域名解析成IP地址所消耗的时间,例如把 www.baidu.com 解析成 xxx.xxx.xxx.xxx 的耗时,一般 2 到 3 毫秒

计算方式:domainLookupEnd - domainLookupStart

TCP连接耗时

指浏览器和WEB服务器建立TCP/IP连接所用的时间

计算方式:connectEnd - connectStart

SSL安全连接耗时

只在 HTTPS 下有效,属于TCP连接耗时的一部分,指安全连接握手耗时

计算方式:location.protocol === 'https:' ? connectEnd - secureConnectionStart : 0

网络请求耗时

指开始发送请求到服务器返回第一个字节所需要的时间

计算方式:responseStart - requestStart

数据传输耗时

指页面返回第一个字节到最后一个字节所用的时间

计算方式:responseEnd - responseStart

DOM解析耗时

指页面请求完成(responseEnd)后,到整个 DOM 解析完所用的时间,页面的复杂度决定了 DOM 解析耗时

计算方式:domContentLoadedEventEnd - responseEnd

资源加载耗时

指 DOM 解析完成后到页面完全加载完所用的时间

计算方式:loadEventEnd - domContentLoadedEventEnd

页面渲染耗时

指页面请求完成(responseEnd)后,到页面完全加载完间隔的时间(包含DOM解析和资源加载),页面渲染时间等于页面完全加载时间 - HTML 加载完成时间

计算方式:loadEventEnd - responseEnd

首包时间

从页面请求到浏览器开始接收到数据所用的时间

计算方式:responseStart - startTime

白屏时间

也指首次渲染时间,指页面出现第一个文字或图像所花费的时间

计算方式:优先使用最新标准 performance.getEntriesByType('paint')[0].startTime,不支持的话使用 Chrome、IE 提供的 firstPaintTimechrome.loadTimes().firstPaintTimeperformance.msFirstPaint,还没有获取到计算 headlinkscript 下载时间,然后取其最大值,最后如果 head 中没有 linkscript 时,取 domInteractive - startTime

说明:老版本 chrome 浏览器可以使用 chrome.loadTimes().firstPaintTime,新版本中该 api 已被废弃

以下为官方给出的计算方式:

function firstPaintTime() {
if (window.PerformancePaintTiming) {
const fpEntry = performance.getEntriesByType('paint')[0];
if (fpEntry) {
return fpEntry.startTime;
}
return 0;
}
}

首次可交互时间

指页面 DOMContentLoaded 事件触发的开始时间,这时候页面可以交互

计算方式:domInteractive - startTime

HTML 加载完成时间

指页面所有 HTML 加载完成(不包括页面渲染时间),即包括 DNSTCPRequestResponse

计算方式:responseEnd - startTime

页面完全加载时间

指页面完全加载完所用的时间,这时候触发完成了 onload 事件

计算方式:loadEventEnd - startTime

首屏时间

首屏时间,也称用户完全可交互时间,即整个页面首屏完全渲染出来,用户完全可以交互,一般首屏时间小于页面完全加载时间,该指标值可以衡量页面访问速度

计算方式:

  • 第一种计算方式是通过计算首屏区域内的所有图片加载时间,然后取其最大值;
  • 第二种计算方式是通过 window.MutationObserver 来监听首屏所有元素变化情况,并记录时间,最后取其最大值(会去掉得分相同重复的值),算出的时间需要加上 domInteractive(可交互时间),通常采用第二种计算方式

说明:对于首屏中出现的动画或者轮播图等,不会影响实际计算时间

最大内容绘制(LCP)

LCP(Largest Contentful Paint)是从真实用户视角度量页面可见区域内容加载时间的指标,通常被近似看作首屏时间,LCP耗时较长,用户需要等待较长时间才能看到可见区域的内容,通常来说需要您特别关注下页面可见区域内的元素数量,以及是否存在大元素,或耗时较长的元素并进行优化。

累积布局偏移(CLS)

CLS(Cumulative Layout Shift)用来衡量页面整个生命周期中发生的所有意外样式移动的总和,用来评估页面视觉稳定性影响,CLS系数较大,用户受页面中内容发生的意外移动的影响也越大,通常需要您特别关注下发生了样式偏移的元素,并仔细检查导致其发生偏移的原因(可能是其他元素加载导致其位置变化)。

首次输入延迟(FID)

FID(First Input Delay)测量的是用户首次发出交互指令到页面可以响应为止的时间差,FID耗时较长,用户能够明显的感知页面处理交互响应的延迟,其主要原因是JS执行过长,优化JS的解析、编译、执行可以直接降低 FID。

首次内容绘制(FCP)

FCP(First Contentful Paint)测量的是页面首页有内容渲染的耗时,FCP耗时较长时,页面将有较长时间处于空白状态,该指标通常也被近似看作白屏时间,通常您需要关注DOM是否过于复杂,以及TTFB耗时。

首字节耗时(TTFB)

TTFB(Time to First Byte)测量的是客户端接收到服务器返回的第一个字节响应信息的耗时,TTFB较长,可能是由于网络延迟大造成的,也可能是由于服务器响应慢造成的,您需要特别关注页面基础文档的DNS、TCP、SSL、Response耗时,以此来判断性能问题的原因。

FP

可交互时间(TTI)

总阻塞时间(TBT)

交互到下一次绘制(INP)

Apdex指标

Apdex 指标也称页面满意度,全称 Application Performance Index,是一个国际通用的页面性能计算标准,该标准将用户对于页面的满意度分为三个等级:满意(0 ~ T)、可容忍(T ~ 4T)、不满意(大于 4T)

计算公式为:Apdex = (满意样本数量 + 可容忍样本数量 / 2) / 所有样本数量

计算结果为 0 到 1 之间的数值,数值越大,表示页面满意度越高。

页面满意度主要取决于 "T" 值的设定和计算指标:

  • "T" 值的设定:比如设为 2 秒,则 0~2 秒表示满意,2~8 秒表示可容忍,超过 8 秒表示不满意
  • 计算指标:比如取页面白屏时间(页面首次渲染时间)作为计算指标

前端监控中,默认 "T" 为 2 秒,计算指标取页面白屏时间

异常捕获

需要处理哪些异常