RUM (Real User Monitoring) (RUM)

Performance

Collecting performance metrics from actual users' browsers in production. Captures real-world TTFB, page load times, and Core Web Vitals. The ground truth for CDN performance measurement.

Updated Mar 9, 2026

Full Explanation

Synthetic monitoring tells you how fast your site is from a lab. RUM tells you how fast it is for real users. There's often a big gap. Real users have slow phones, congested WiFi, far-flung locations, and browser extensions that mess with loading.

For CDN evaluation, RUM is the only metric that matters. A CDN might look great in synthetic tests from major cities but perform poorly for your actual user base in tier-2 markets. RUM data broken down by geography, device type, and connection speed shows you where the CDN is working and where it's not.

Most RUM solutions use the Navigation Timing API and Resource Timing API in the browser. A small JavaScript snippet collects timing data for every page load and beacon it to an analytics endpoint. Key metrics: TTFB (how fast the CDN responded), FCP (how fast something appeared), LCP (how fast the main content loaded).

Examples

# Basic RUM with Navigation Timing API
<script>
window.addEventListener('load', () => {
  const perf = performance.getEntriesByType('navigation')[0];
  const data = {
    dns: perf.domainLookupEnd - perf.domainLookupStart,
    tcp: perf.connectEnd - perf.connectStart,
    tls: perf.secureConnectionStart ? perf.requestStart - perf.secureConnectionStart : 0,
    ttfb: perf.responseStart - perf.requestStart,
    download: perf.responseEnd - perf.responseStart,
    dom: perf.domContentLoadedEventEnd - perf.responseEnd,
    total: perf.loadEventEnd - perf.startTime
  };
  navigator.sendBeacon('/analytics', JSON.stringify(data));
});
</script>

Video Explanation

Frequently Asked Questions

Collecting performance metrics from actual users' browsers in production. Captures real-world TTFB, page load times, and Core Web Vitals. The ground truth for CDN performance measurement.

# Basic RUM with Navigation Timing API
<script>
window.addEventListener('load', () => {
  const perf = performance.getEntriesByType('navigation')[0];
  const data = {
    dns: perf.domainLookupEnd - perf.domainLookupStart,
    tcp: perf.connectEnd - perf.connectStart,
    tls: perf.secureConnectionStart ? perf.requestStart - perf.secureConnectionStart : 0,
    ttfb: perf.responseStart - perf.requestStart,
    download: perf.responseEnd - perf.responseStart,
    dom: perf.domContentLoadedEventEnd - perf.responseEnd,
    total: perf.loadEventEnd - perf.startTime
  };
  navigator.sendBeacon('/analytics', JSON.stringify(data));
});
</script>

Related CDN concepts include: