捕获 RUM 指标

真实用户监控技术文档

以下文档解释了 Site24x7 RUM 脚本的工作原理、捕获的指标及其计算。 

提供给您的脚本异步下载信标文件(site24x7rum.js)。信标文件包含捕获页面指标的代码。为了计算页面加载指标,我们使用 Navigation Timing API  - 该规范定义了 Web 应用程序访问与导航和元素相关的时间信息的接口。每 5 秒将收集的指标发送到服务器。

页面加载后,浏览器中会触发“加载”事件。我们监听该加载事件,然后根据该页面的性能计时对象计算所需的页面指标,如重定向时间、dns 时间连接时间、网络时间、后端时间和前端时间。为了计算上述指标,我们使用Performance Timing接口定义的属性:

示例:


redirection time = performanceObj.redirectStart - performanceObj.redirectEnd

 

Ajax Calls

为了获取 ajax 调用信息,我们监听 XMLHttpRequest.prototype.open 并收集 ajax 调用。

Javascript 错误

我们通过监听在抛出 javascript 错误时触发的 window.onerror 事件来捕获 javascript 错误。

window.onerror = function( message, url, lineNo, columnNo, error) {
// code to send captured error
}

指标和计算:

以下部分解释了捕获的指标、其计算和重要性。 

重定向时间

Redirection Time = redirectEnd - redirectStart

重定向时间衡量请求遵循重定向所花费的时间。如果没有重定向,则重定向时间预计为 0。在缓存资源的情况下,重定向时间对应于应用程序缓存查找所用的时间。 

域名解析时间

DNS Time = domainLookupEnd - domainLookupStart

DNS 时间监测完成对所请求资源的域查找的时间量。在缓存资源和缓存 DNS 记录的情况下,DNS 时间预计为 0。

DNS 时间为网站管理员/devOps 提供了关于通过最小化为给定页面加载的跨域资源数量可以做出多少改进的见解。

连接时间

连接时间监测建立传输连接和执行 SSL 身份验证的时间量
连接时间还包括由于浏览器发出的并发请求过多而占用的阻塞/停滞时间。有效使用浏览器缓存和 HTTP Keep-Alive 标头可以大大减少连接时间的影响。

服务器时间

Server Time = responseStart - requestStart

服务器时间监测应用程序后端为请求的资源提供服务所花费的时间
服务器时间的增加可能是由于您的应用程序服务器处理了过多的流量,这可能直接对应于页面浏览量,或者这可能意味着应用程序服务器中存在潜在问题。

下载时间

Download Time = responseEnd - responseStart

下载时间衡量下载所请求内容的时间量减少传输的总字节数将立即反映在下载时间上。
使用 CSS/JS 缩小等预处理优化和传输资源的更好压缩比将导致更快的页面加载和更少的带宽消耗。

精心设计的缓存机制也将显着缩短下载时间。
最终用户的 ISP 及其网络能力也应被视为影响下载时间的另一个因素。

第一个字节时间

 

First Byte Time = responseStart - redirectStart

监测浏览器接收请求的第一条信息所花费的时间
第一个字节的时间是对以下导航阶段组合的指标,

  1. 发起请求所花费的时间。
  2. 后端处理请求所花费的时间。
  3. 客户端接收已处理请求的第一个字节所用的时间。

文档渲染时间

 

Document Rendering Time = domComplete - domLoading

文档渲染时间衡量浏览器解析 HTML 和渲染 DOM 树所花费的时间
这本质上是解析父文档及其子资源(如图像、图标等)所花费的时间。但是,它不包括引用样式表或内联 javascript 的执行时间。domComplete 标志着 JS 框架执行的开始。

页面渲染时间

 

Page Rendering Time = loadEventEnd - loadEventStart

页面呈现时间衡量页面加载后任何其他逻辑所花费的时间页面渲染时间衡量构建渲染树所需的时间。这涉及查询 CSS 对象模型和文档对象模型以及任何 Javascript 逻辑以构建最终渲染树及其布局。
通过仔细选择加载资源的顺序并选择异步加载资源来优化关键渲染路径将有助于提高前端性能。

对于没有 Timing-Allow-Origin 标头的跨域资源,大多数性能时序时间戳都不会公开。它们的值将被记录为 0。