Hurtigere hjemmeside hjælp til en langsom hjemmeside

LoAF

LoAF (Long Animation Frames) er et signal/koncept til at identificere frames hvor browserens rendering/JS tager for lang tid – ofte tæt koblet til dårlig INP og 'hak' i UI.

Skrevet af Kim Tetzlaff

Kort fortalt: LoAF (Long Animation Frames) handler om de frames hvor browseren bruger for lang tid på at nå fra “input” til “næste paint”. I praksis er det en måde at tænke (og i stigende grad måle) “hvorfor føles UI tungt?”, fordi en lang frame kan skyldes både JavaScript, layout, paint og compositing.

Hvis du har arbejdet med Long Task, er LoAF næste naturlige niveau: ikke kun “hvor længe kørte JS?”, men “hvorfor blev hele frame-budgettet sprængt?”

Hvad betyder LoAF i praksis?

En browser prøver at tegne UI i en stabil rytme. Når en frame tager for lang tid, kan brugeren mærke:

  • klik der reagerer “sent”
  • hover/scroll der hakker
  • animationer der “stutter”

En lang frame kan være:

  • JS der fylder main thread (store handlers, tredjepart, heavy frameworks)
  • style/layout der bliver dyrt (store DOM-opdateringer, dårlig CSS-struktur)
  • paint der er tung (dyre effekter, mange layers, store gradients)
  • compositing der ikke kan følge med (for mange lag/filters)

Hvorfor er det vigtigt ift. INP?

INP måler hvor hurtigt siden reagerer på interaktion og når til næste paint. Hvis du har lange frames, er der god chance for at de “stjæler” tid i netop den kæde.

Det er også derfor du kan have en side der loader “ok”, men stadig føles langsom: load-metrics fanger ikke alt ved interaktion.

Eksempel fra praksis

Forestil dig et filterpanel:

  1. Brugeren klikker “Filtrér”.
  2. JS bygger 200 DOM-noder (kort, badges, billeder).
  3. CSS triggers layout på en stor container.
  4. Der er en baggrund med blur/gradients der gør paint tung.

Resultat: en enkelt frame bliver meget lang. Det føles som lag – også selvom det “kun” er 200–400ms.

Her kan du ofte få mest effekt ved at:

  • reducere DOM-mængden
  • batch’e DOM writes/reads (se Layout thrashing)
  • udskyde ikke-kritisk rendering
  • minimere dyre visuelle effekter i kritiske øjeblikke

Typiske fejl og misforståelser

“Hvis jeg fjerner Long Tasks, er alt godt”

Ikke altid. Du kan godt have korte tasks, men stadig lange frames pga. paint/layout. Det er ofte her LoAF-tankegangen hjælper.

“Det er kun et problem på dårlige telefoner”

Det viser sig først på svage enheder, men det betyder bare at oplevelsen for en stor del af dine brugere er dårligere end din egen desktop-test. Performance skal måles på realistiske enheder.

Sådan arbejder du dig frem til årsagen

Start med:

Hvis du ser at “Rendering/Painting” fylder meget:

  • tjek om du bruger dyre CSS-effekter (blur, store gradients, store fixed overlays)
  • tjek om der er store layout-skift (CLS) – se CLS

Hvis du ser at “Scripting” fylder:

Relaterede begreber og næste skridt

FAQ

Er LoAF det samme som Long Tasks?

Nej. Long Tasks handler primært om lange tasks på main thread (typisk JS). LoAF handler om lange frames, hvor flere ting kan bidrage: JS, style/layout, paint og compositing.

Hvorfor er 'lange frames' vigtige?

Fordi brugerens oplevelse styres af frames. Når frames bliver for lange, føles scrolling og klik hakkende, og input-respons bliver dårligere.

Eksterne kilder

LoAF hænger sammen med browserens performance-APIs og dokumentation omkring lange frames.

Næste skridt fra begreb til handling

Guides og blogindlæg der matcher begrebets emne - ud fra fælles tags og sidens fokus.

Om forfatteren

Kim Tetzlaff

Kim skriver og vedligeholder indhold på hurtigere-hjemmeside.dk med fokus på målelig performance, Core Web Vitals og teknisk SEO. Målet er at gøre optimering konkret: hvad der faktisk flytter tal i feltdata, og hvordan du finder den korteste vej fra symptom til fix.

Kim Tetzlaff