Performance budgets — Grænser der forhindrer regressioner
Et performance budget er en eksplicit grænse for performance-metrics. Overskrides budgettet stopper CI/CD-pipelinen. Det er den eneste måde at forhindre at performance langsomt forringes over tid.
Uden performance budgets forringes performance langsomt og umærkeligt — et nyt script her, et større billede der. Ingen enkeltændring er nok til at trigge alarm, men de akkumulerer. Et performance budget sætter eksplicitte grænser og gør regressioner synlige inden de rammer brugerne.
Typer af performance budgets
Filstørrelses-budgetter er de nemmeste at implementere og håndhæve:
- Maksimalt JavaScript-bundle: f.eks. 300 KB (komprimeret)
- Maksimal total sidestørrelse: f.eks. 1 MB
- Maksimal billedstørrelse per billede: f.eks. 200 KB
Timing-budgetter er tættere på brugeroplevelsen:
- LCP under 2,5 sekunder
- Total Blocking Time under 150ms
- Time to Interactive under 3,5 sekunder
Kvantitets-budgetter kontrollerer antallet af ressourcer:
- Maksimalt 50 HTTP-requests per side
- Maksimalt 3 tredjeparts-scripts
Implementering i CI/CD
Performance budgets er kun effektive hvis de håndhæves automatisk. Manuel review ser ikke alle regressioner.
Lighthouse CI er Google’s officielle tool til at køre Lighthouse i CI-pipelines og sammenligne mod budgetter:
# .lighthouserc.yml
ci:
collect:
url: ['http://localhost:3000/']
assert:
assertions:
largest-contentful-paint:
- error
- maxNumericValue: 2500
total-blocking-time:
- error
- maxNumericValue: 200
'resource-summary:script:size':
- error
- maxNumericValue: 307200 # 300 KB
Bundlesize er et NPM-tool der tjekker bundle-størrelse mod budgetter og kan konfigureres til at fejle PR-checks.
Webpack Bundle Analyzer visualiserer hvad der fylder i bundlet — nyttigt til at forstå hvor budgettet bruges.
Sæt realistiske budgetter
Budgetter der aldrig overholdes ignoreres. Start med at måle den aktuelle performance, og sæt budgetter tæt på det nuværende niveau — måske 10% bedre. Stram til over tid.
Brug Performance Budget Calculator eller referér til Googles anbefalinger:
- Mobilbrugere på 3G: budgettér 150-170 KB kritisk JavaScript (unkomprimeret)
- God LCP: under 2,5 sekunder på 75. percentil af rigtige brugere
Budget-typer og hvornår de er nyttige
| Budget-type | Fordele | Ulempe |
|---|---|---|
| Filstørrelse | Let at måle, deterministisk | Korrelerer ikke direkte med brugeroplevelse |
| Timing (lab) | Direkte brugeroplevelse | Varierer med testmiljø |
| Timing (field/RUM) | Afspejler rigtige brugere | Langsommere feedback-loop |
Det bedste setup kombinerer filstørrelses-budgetter i CI (hurtig feedback) med timing-budgetter baseret på CrUX-data (sanity check mod virkeligheden). → 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 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
- RUM vs. syntetisk monitoring — To syn på web performance
- 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 et performance budget?
- Et performance budget er en defineret grænse der ikke må overskrides — f.eks. maksimalt 200 KB JavaScript, LCP under 2,5 sekunder, eller Total Blocking Time under 200ms. Når en ændring overskrider budgettet, fejler build-processen og ændringen skal optimeres inden deployment.
- Hvilke metrics er typisk inkluderet i et performance budget?
- Filstørrelses-budgetter (total sidestørrelse, JavaScript bundle størrelse, billede-størrelse), timing-budgetter (LCP, TTI, TBT) og kvantitetsbudgetter (antal HTTP-requests, antal tredjeparts-scripts). Vælg metrics der er direkte relateret til brugeroplevelsen på dit specifikke site.
- Hvad er Lighthouse CI og hvordan integreres det i en CI/CD pipeline?
- Lighthouse CI er Googles open source tool til at køre Lighthouse-audits automatisk ved hvert commit eller deploy. Det kan konfigureres med budgetgrænser der bryder build-processen hvis de overskrides. Integreres som et step i GitHub Actions, GitLab CI eller CircleCI. Resultaterne gemmes og kan sammenlignes over tid for at spore performance-trends.
- Hvad er forskellen på lab-performance og field-performance i performance budget-kontekst?
- Lab-performance (Lighthouse, WebPageTest) er deterministisk og reproducerbar — den samme test under de samme betingelser. Field-performance (CrUX, RUM) afspejler rigtige brugeres oplevelse på tværs af enheder, netværkshastigheder og geografi. Performance budgets i CI/CD typisk bruger lab-metrics fordi de er hurtige og reproducerbare. Google bruger field-data (CrUX) som rankinggrundlag — så budgetter bør kalibreres mod CrUX-data for at have reel SEO-relevans.
- Hvad sker der når et performance budget overskrides i CI/CD?
- Når en ændring overskrider et defineret performance budget, fejler build-processen og deployment stoppes automatisk. Udvikleren ser en fejlbesked med information om hvilken metric der er overskredet og med hvilken margin. Ændringen skal optimeres — reducer JavaScript-bundle, optimer billeder, eller revurdér om featuren er nødvendig — inden den kan merges. Det er det præcise formål med performance budgets: at gøre regressioner synlige og handlekraftige, ikke blot monitorerbare.
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 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
- RUM vs. syntetisk monitoring — To syn på web performance
- 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