Practica de a depana INP (Interaction to Next Paint) folosind API-ul Long Animation Frames (LoAF) se concentrează pe identificarea cadrelor de animație lungi care blochează firul principal al browserului. Spre deosebire de alte metrici Core Web Vitals, LoAF oferă detalii granulare despre durata exactă a fiecărui cadru, permițându-ți să vezi nu doar că o interacțiune a fost lentă, ci și de ce. Ignorarea acestei practici poate duce la o experiență utilizator „lipicioasă” și neresponsivă, chiar dacă timpii de încărcare inițială sunt buni, deoarece utilizatorul simte întârzieri la click sau tastare.
Cum o aplici
- Implementează monitorizarea: Adaugă un
PerformanceObservercare ascultă tipul'long-animation-frame'. Acesta va trimite rapoarte oricând un cadru depășește pragul de 50ms. - Capturează datele: În callback-ul observatorului, extrage informațiile despre durata cadrului, timestamp-ul și, crucial, lista de funcții executate în acel cadru.
- Analizează stiva de apeluri: Folosește datele colectate pentru a identifica funcțiile JavaScript care consumă cel mai mult timp. Concentrează-te pe cele care rulează în timpul evenimentelor de interacțiune (click, input).
- Optimizează codul: Refactorizează funcțiile lente. Împarte sarcini grele în bucăți mai mici folosind
requestIdleCallback,setTimeoutsau Web Workers pentru a elibera firul principal.
Exemplu
Iată cum poți configura observatorul pentru a captura cadrele lungi:
// Varianta corectă: Observare LoAF
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
// entry.duration este durata totală a cadrului în ms
// entry.renderStart și entry.processInputStart oferă detalii fine
console.log('Cadru lung detectat:', entry.duration, 'ms');
console.log('Funcții executate:', entry.scripts);
}
});
observer.observe({ type: 'long-animation-frame', buffered: true });
Evită să te bazezi doar pe performance.now() manual în evenimente, deoarece nu îți oferă contextul complet al ciclului de randare al browserului.
Cum verifici
- Chrome DevTools: Mergi la tab-ul Performance, înregistrează o sesiune în timp ce interacționezi cu pagina și caută markerii roșii etichetați „Long Animation Frame”.
- Lighthouse: Rulează o auditare; deși Lighthouse nu afișează direct LoAF, rezultatele INP slabe indică necesitatea acestei investigații.
- Console Browser: Verifică dacă rapoartele generate de
PerformanceObserverapar în consola de dezvoltare în timp ce testezi interactivitatea.
Greșeli frecvente
- Ignorarea impactului UX: Crezi că un INP sub 200ms este întotdeauna acceptabil, dar un singur cadru foarte lung poate crea senzația de „înghețare” a interfeței, chiar dacă media este bună.
- Optimizarea prematură: Încerci să optimizezi toate funcțiile fără a te baza pe datele reale din LoAF, pierzând timp pe cod care nu este colateralul problemelor de performanță.
- Confuzia cu FPS: Nu confunda cadrele lungi cu rata generală de cadre pe secundă (FPS). Un site poate avea un FPS decent, dar să aibă cadere bruscă a performanței la interacțiuni specifice, lucru pe care LoAF îl evidențiază distinct.
Resurse gratuite
Alte subiecte din „Core Web Vitals”
- Menține LCP sub 2,5 secunde la percentila 75
- Menține INP sub 200 ms prin task-uri scurte pe main thread
- Menține CLS sub 0,1 rezervând spațiu pentru conținutul încărcat târziu
- Redu TTFB sub 800 ms: server rapid, cache și CDN
- Identifică elementul LCP pentru fiecare tip de pagină
- Evaluează metricile separat pentru mobil și desktop
- Urmărește FCP și TBT ca metrici de diagnostic