RUM vs. syntetisk monitoring — To syn på web performance
RUM måler hvad rigtige brugere oplever. Syntetisk monitoring måler i kontrollerede testmiljøer. Google bruger RUM (CrUX) som rankinggrundlag — ikke Lighthouse-scores.
RUM (Real User Monitoring) og syntetisk monitoring er to komplementære tilgange til web performance-overvågning der besvarer fundamentalt forskellige spørgsmål. RUM måler hvad rigtige brugere faktisk oplever på tværs af enheder, netværkshastigheder og geografi. Syntetisk monitoring måler under kontrollerede betingelser for reproducerbarhed og regressionsdetektion. For SEO er skellet kritisk: Google bruger CrUX-data (en form for RUM) som rankinggrundlag — ikke Lighthouse-scores fra syntetisk testing.
Syntetisk monitoring
Syntetisk monitoring kører automatiserede tests med foruddefinerede parametre: specifik enhed, netværkshastighed, geografisk lokation. Testen er reproducerbar — den samme side under de samme betingelser giver (næsten) det samme resultat.
Primære tools:
- Lighthouse (Chrome DevTools, CLI, CI) — giver detaljerede performance-scores og konkrete forbedringssforslag
- WebPageTest — avancerede tests fra globale lokationer med filmstribe-visualisering af indlæsning
- PageSpeed Insights (Lab-data) — Lighthouse kørt på Googles servere mod en specifik URL
Hvornår syntetisk er det rigtige valg:
- Regression testing i CI/CD — fang forringelser inden deployment
- Debugging — reproducerbar test der kan gentages efter ændringer
- Benchmarking mod konkurrenter under kontrollerede forhold
Begrænsninger:
- Afspejler ikke rigtige brugeres enhed, forbindelseshastighed og geografiske lokation
- Cache-tilstand afviger fra rigtige brugeres (typisk cold cache i tests)
- Tredjepartsscripts fra brugerens session mangler
Real User Monitoring (RUM)
RUM indsamler performance-data fra rigtige brugere via browser-APIs og sender dem til en analytics-endpoint. Data repræsenterer den faktiske fordeling af brugeroplevelser.
Implementering med PerformanceObserver:
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.entryType === 'largest-contentful-paint') {
sendBeacon({ lcp: entry.startTime, url: location.href });
}
}
});
observer.observe({ type: 'largest-contentful-paint', buffered: true });
Web Vitals library (Google) forenkler RUM-implementering:
import { getLCP, getFID, getCLS, getINP, getTTFB } from 'web-vitals';
getLCP(metric => sendBeacon(metric));
getINP(metric => sendBeacon(metric));
getCLS(metric => sendBeacon(metric));
Hvornår RUM er det rigtige valg:
- Forstå brugeroplevelsen på tværs af devices, netværk og geografi
- Identificere real-world performance-problemer der ikke fanges i lab
- Validere at optimeringer faktisk hjælper rigtige brugere
CrUX og Google ranking
Chrome User Experience Report (CrUX) er Googles aggregerede RUM-dataset baseret på anonymiserede data fra Chrome-brugere der har aktiveret Usage Statistics. Det er det datagrundlag Google bruger til Core Web Vitals som rankingfaktor.
CrUX kræver minimum ca. 1.000 besøg per URL-gruppe for at vise data. Nye sider og sider med lav trafik vises ikke i CrUX — og dermed heller ikke i GSC’s Core Web Vitals-rapport.
Konsekvensen: en side kan have en perfekt Lighthouse-score men dårlige CrUX-data (og dårlig ranking), og omvendt. Optimer altid med CrUX-data som det endelige mål.
Det kombinerede setup
Det mest effektive setup bruger begge:
- Syntetisk (CI) — Lighthouse CI kører ved hvert deploy og fanger store regressioner inden de rammer brugerne
- RUM (produktion) — Web Vitals library sender Core Vitals-data til Google Analytics 4 eller en custom endpoint
- CrUX (Google) — GSC Core Web Vitals-rapport validerer at optimeringer slår igennem for rigtige brugere → Denne artikel er en del af Web Performance — Core Web Vitals og teknisk hastighed.
Andre artikler i samme emne
- Animation performance — Frame rate og jank-fri bevægelse
- Billedoptimering — Formater, størrelser og SEO
- Browser rendering pipeline — Fra HTML til pixels
- CLS-problemer — Årsager til Cumulative Layout Shift og løsninger
- Core Web Vitals — LCP, INP og CLS forklaret
- CSS — Cascading Style Sheets og SEO
- CSS containment — Isolér rendering og accelerér layout
- Font-optimering — Webfonts, FOUT og SEO
- HTTP/2 og HTTP/3 — Protokoller der eliminerer latency-overhead
- INP-optimering — Interaction to Next Paint og Core Web Vitals
- JavaScript bundle-optimering — Code splitting, tree shaking og analyse
- Kritisk renderingsti — Hvad browseren gør før du ser noget
- Latency — Forsinkelse i netværket og hvad du kan gøre ved det
- Lazy loading — Udskyd indlæsning af billeder og ressourcer
- LCP-optimering — Sådan forbedrer du Largest Contentful Paint
- Long Tasks og LoAF — Hvad blokerer main thread
- Navigation og resource timings — Browserens performance-API
- PageSpeed og SEO — Hastighed som rankingfaktor
- Performance budgets — Grænser der forhindrer regressioner
- Performance timings — Hvornår er det for langsomt?
- Resource hints — Preload, prefetch og preconnect til SEO
- Responsive images — srcset, sizes og art direction
- Responsivt design — Mobile-first og SEO
- Service Workers — Offline caching og PWA performance
- Speculative loading — Prefetch og prerender af næste side
- Startup performance — Hurtig app-start og time to interactive
- Tredjeparts-scripts og performance — Impact og strategier
- Tredjepartsscripts — Analytics, ads og performance-konsekvenser
- TTFB og hosting — Server response time og SEO
- Video performance — Lazy loading, formater og indlæsningsstrategi
- Viewport tag — Meta viewport og mobil-rendering
- Web Workers — Parallel JavaScript uden main thread-blokning
Ofte stillede spørgsmål
- Hvad er Real User Monitoring (RUM)?
- RUM er indsamling af performance-data fra rigtige brugere i realtid via Performance API i browseren. Data sendes til en analytics-endpoint og aggregeres. Google bruger Chrome User Experience Report (CrUX) — en form for RUM — som datagrundlag for Core Web Vitals-rankingfaktoren.
- Hvornår er syntetisk monitoring nyttigt?
- Syntetisk monitoring (Lighthouse, WebPageTest, PageSpeed Insights Lab-data) er ideelt til regression testing i CI/CD — du kører den samme test under kontrollerede forhold og fanger forringelser hurtigt. Den afspejler ikke rigtige brugeres netværk, enheder og caching, men er reproducerbar og hurtig at køre.
- Hvad er CrUX og hvordan er det forbundet til Google ranking?
- Chrome User Experience Report (CrUX) er Googles aggregerede dataset af anonymiserede performance-data fra Chrome-brugere. Det er datagrundlaget Google bruger til Core Web Vitals som rankingfaktor. CrUX kræver minimum ca. 1.000 besøg per URL-gruppe. En Lighthouse-score på 100 garanterer ikke god CrUX-data — optimer med CrUX-data (GSC Core Web Vitals-rapport) som det endelige mål.
- Kan en side have grønt Lighthouse-score og alligevel have dårlige Core Web Vitals?
- Ja — og det er hyppigt. Lighthouse kører under kontrollerede betingelser (cold cache, specifik enhed, specifik netværkshastighed). Rigtige brugere har varmt cache, ældre enheder og varierende netværk. En side der performer godt i Lighthouse kan have dårlig field-performance i CrUX fordi den er langsom på ældre Android-enheder eller langsomme mobilforbindelser.
- Hvilke RUM-tools kan man bruge som alternativ til at bygge sin egen implementation?
- Managed RUM-løsninger inkluderer: Google Analytics 4 (måler Core Web Vitals via web-vitals.js biblioteket), Vercel Speed Insights (for Next.js-sites), Cloudflare Browser Insights (gratis med Cloudflare-opsætning), Sentry Performance og Datadog RUM. Alle indsamler LCP, INP og CLS fra rigtige brugere og segmenterer på side, enhed og geografi. For SEO-formål er GSC's Core Web Vitals-rapport baseret på Googles egne CrUX-data og er det mest direkte mål for hvad der påvirker ranking.
Placering i ordbogen
- Animation performance — Frame rate og jank-fri bevægelse
- Billedoptimering — Formater, størrelser og SEO
- Browser rendering pipeline — Fra HTML til pixels
- CLS-problemer — Årsager til Cumulative Layout Shift og løsninger
- Core Web Vitals — LCP, INP og CLS forklaret
- CSS — Cascading Style Sheets og SEO
- CSS containment — Isolér rendering og accelerér layout
- Font-optimering — Webfonts, FOUT og SEO
- HTTP/2 og HTTP/3 — Protokoller der eliminerer latency-overhead
- INP-optimering — Interaction to Next Paint og Core Web Vitals
- JavaScript bundle-optimering — Code splitting, tree shaking og analyse
- Kritisk renderingsti — Hvad browseren gør før du ser noget
- Latency — Forsinkelse i netværket og hvad du kan gøre ved det
- Lazy loading — Udskyd indlæsning af billeder og ressourcer
- LCP-optimering — Sådan forbedrer du Largest Contentful Paint
- Long Tasks og LoAF — Hvad blokerer main thread
- Navigation og resource timings — Browserens performance-API
- PageSpeed og SEO — Hastighed som rankingfaktor
- Performance budgets — Grænser der forhindrer regressioner
- Performance timings — Hvornår er det for langsomt?
- Resource hints — Preload, prefetch og preconnect til SEO
- Responsive images — srcset, sizes og art direction
- Responsivt design — Mobile-first og SEO
- Service Workers — Offline caching og PWA performance
- Speculative loading — Prefetch og prerender af næste side
- Startup performance — Hurtig app-start og time to interactive
- Tredjeparts-scripts og performance — Impact og strategier
- Tredjepartsscripts — Analytics, ads og performance-konsekvenser
- TTFB og hosting — Server response time og SEO
- Video performance — Lazy loading, formater og indlæsningsstrategi
- Viewport tag — Meta viewport og mobil-rendering
- Web Workers — Parallel JavaScript uden main thread-blokning