捕获 RUM 指标
真实用户监控技术文档
以下文档说明了 Site24x7 RUM 脚本的工作原理以及捕获的指标及其计算方式。
提供给您的脚本会异步下载信标文件(site24x7rum.js)。信标文件包含捕获页面指标的代码。为了计算页面加载指标,我们使用了 Navigation Timing API——该规范定义了 Web 应用程序访问与导航和元素相关的计时信息的接口。每 5 秒,收集到的指标会被发送到服务器。
页面加载后,浏览器中会触发 'load' 事件。我们监听该加载事件,然后从该页面的性能计时对象计算所需的页面指标,如重定向时间、DNS 时间、连接时间、网络时间、后端时间和前端时间。为了计算上述指标,我们使用了 Performance Timing 接口定义的属性:
例如:
redirection time = performanceObj.redirectStart - performanceObj.redirectEnd

Ajax 调用
为了获取 Ajax 调用信息,我们监听 XMLHttpRequest.prototype.open 并收集 Ajax 调用。
JavaScript 错误
我们通过监听 window.onerror 事件来捕获 JavaScript 错误,该事件在抛出 JavaScript 错误时触发。
window.onerror = function( message, url, lineNo, columnNo, error) {
// code to send captured error
}
指标与计算:
以下部分说明了捕获的指标、其计算方式和重要性。

重定向时间
Redirection Time = redirectEnd - redirectStart
重定向时间衡量请求跟随重定向所需的时间。如果没有重定向,重定向时间预计为 0。对于缓存资源,重定向时间对应于应用程序缓存查找所需的时间。
DNS 时间
DNS Time = domainLookupEnd - domainLookupStart
DNS 时间衡量完成所请求资源域名查找所需的时间。对于缓存资源和缓存的 DNS 记录,DNS 时间预计为 0。
DNS 时间为 Web 管理员/DevOps 提供洞察,帮助了解通过减少给定页面加载的跨源资源数量可以实现多大程度的改进。
连接时间
Connection Time = connectEnd - connectStart
连接时间衡量建立传输连接和执行 SSL 认证所需的时间。
连接时间还包括由于浏览器发出过多并发请求而导致的阻塞/停滞时间。有效使用浏览器缓存和 HTTP Keep-Alive 头可以大大减少连接时间的影响。
服务器时间
Server Time = responseStart - requestStart
服务器时间衡量应用后端提供所请求资源所需的时间。
服务器时间增加可能是由于应用服务器处理过多流量,这可能与页面浏览量直接相关,也可能意味着应用服务器存在底层问题。
下载时间
Download Time = responseEnd - responseStart
下载时间衡量下载所请求内容所需的时间。减少总传输字节数将立即反映在下载时间上。
采用 CSS/JS 压缩等预处理优化,以及提高传输资源的压缩比,将带来更快的页面加载速度和更少的带宽消耗。
设计良好的缓存机制也将显著改善下载时间。
终端用户的 ISP 及其网络能力也应视为影响下载时间的另一个因素。
首字节时间
First Byte Time = responseStart - redirectStart
首字节时间衡量浏览器收到请求第一条信息所需的时间。
首字节时间是以下几个导航阶段的综合衡量:
- 发起请求所需的时间。
- 后端处理请求所需的时间。
- 客户端接收处理后的请求的第一个字节所需的时间。
文档渲染时间
Document Rendering Time = domComplete - domLoading
文档渲染时间衡量浏览器解析 HTML 并渲染 DOM 树所需的时间。
这本质上是解析父文档及其子资源(如图片、图标等)所需的时间。但不包括引用样式表或内联 JavaScript 的执行时间。domComplete 标志着 JS 框架执行的开始。
页面渲染时间
Page Rendering Time = loadEventEnd - loadEventStart
页面渲染时间衡量页面加载后执行任何附加逻辑所需的时间。页面渲染时间衡量构建渲染树所需的时间。这涉及查询 CSS 对象模型和文档对象模型,以及任何 JavaScript 逻辑来构建最终的渲染树及其布局。
通过精心选择资源加载顺序并选择异步加载资源来优化关键渲染路径,将有助于提升前端性能。
对于没有 Timing-Allow-Origin 标头的跨源资源,大多数性能计时时间戳不会暴露。其值将被记录为 0。
