Help APM Real User Monitoring Capturing RUM Metrics

Capturing RUM Metrics

Real User Monitoring Technical Documentation

The following document explains how Site24x7 RUM script works, metrics captured and their calculation

The  script provided to you downloads the beacon file(site24x7rum.js) asynchronously. Beacon file contains the code to capture the page metrics. For calculating the page load metrics we are using Navigation Timing API  - This specification defines an interface for web applications to access timing information related to navigation and elements.  Every 5 seconds the collected metrics  are sent to server.

After a page is loaded , ' load' event is fired in browser. We listen to that load event and then required page metrics like redirection time, dns time connection time, network time, backend time and frontend time are calculated from the performance timing object of that page. For calculating the above metrics we use the attributes  defined by the Performance Timing interface:

For Example:
redirection time = performanceObj.redirectStart - performanceObj.redirectEnd

 

Ajax Calls

To get the ajax calls information we listen to XMLHttpRequest.prototype.open and collect the ajax calls.

Javascript Errors

We are capturing javascript errors by listening to window.onerror event that is fired when javascript error is thrown.

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

Metrics and calculation:

The following section explains the metrics captured, its calculation and importance. 

Redirection Time

Redirection Time = redirectEnd - redirectStart

Redirect time measures the amount of time it takes a request to follow a redirect. If there are no redirects, the redirection time is expected to be 0. In case of cached resources, redirection time corresponds to the time taken for application cache lookup. 

DNS Time

DNS Time = domainLookupEnd - domainLookupStart

DNS time measures the amount of time to complete a domain lookup for the requested resource. In case of cached resources and cached DNS records, the DNS time is expected to be 0.

DNS time provides the webmasters/devOps insights as to how much improvements can be made by minimizing the number of cross-origin resources loaded for a given page.

Connection Time

Connection Time = connectEnd - connectStart  

Connection time measures the amount of time to establish a transport connection and perform SSL authentication.
Connection time also includes the blocked/stalled time that is taken up due to too many concurrent requests issued by the browser. Effective uses of browser caching and the HTTP Keep-Alive header can greatly reduce the impact of connection time.

Server Time

Server Time = responseStart - requestStart

Server time measures the amount of time taken by the application backend to serve the requested resource.
An increase in server time might be a result of your application servers handling excess traffic, which might correspond directly to pageviews count, or it could mean an underlying problem in the application server.

Download Time

Download Time = responseEnd - responseStart

Download time measures the amount of time to download the requested content. Reducing the overall bytes transferred would immediately reflect upon Download time.
Employing pre-processing optimizations such as CSS/JS minification and a better compression ratio for the transferred resources would result in faster page loads and lesser bandwidth consumption as well.

A well-designed caching mechanism will also yield significant improvements in download time.
The end users' ISPs, and thus their network capabilities, should also be considered as another factor contributing to download time.

FirstByte Time

First Byte Time = responseStart - redirectStart

Time To First Byte measures the amount of time taken by the browser to receive the first piece of information for a request.
Time to first byte is a measure of the combination of the following stages of navigation ,

  1. The time taken to initiate a request.
  2. The time taken by the backend to process the request.
  3. The time taken by the client to receive the first byte of the processed request.

Document Rendering Time

Document Rendering Time = domComplete - domLoading

Document rendering time measures the amount of time taken by the browser to parse the HTML and render the DOM Tree.
This is essentially the time taken for parsing the parent document and its sub resources such as images, icons, etc. However, it does not include the execution time for referenced stylesheets or inline javascript. domComplete marks the beginning of the JS framework execution.

Page Rendering Time

Page Rendering Time = loadEventEnd - loadEventStart

Page rendering time measures the time taken for any additional logic following the page load. Page rendering time measure how long it takes to build the render tree. This involves querying both the CSS Object Model and the Document Object Model in addition to any Javascript logic to build the final render tree and its layout.
Optimizing the Critical Render Path by carefully choosing the order in which the resources are loaded and opting to load resources asynchronously will contribute to better front-end performance.

For cross-origin resources without the Timing-Allow-Origin header, most performance timing timestamps are not exposed. Their values will be recorded as 0. 
Was this document helpful?
Thanks for taking the time to share your feedback. We’ll use your feedback to improve our online help resources.

Help APM Real User Monitoring Capturing RUM Metrics