🔍 inp.works

Gestore di eventi pesante: perché un clic richiede 500 ms e come risolverlo

Cosa succede

Quando un utente fa clic, il browser esegue il gestore di eventi fino in fondo prima di poter disegnare il frame successivo. Se il gestore fa centinaia di millisecondi di lavoro sincrono — filtrare un array grande, costruire DOM, fare il parsing di JSON — la pagina resta congelata esattamente per quel tempo. L'utente non vede nulla finché il gestore non ritorna.

È il problema di INP più comune e compare nella scomposizione dell'INP come una lunga fase di processing time.

Come riconoscerlo

Come risolverlo

Problema

button.addEventListener("click", () => {
  const results = filterRows(allRows)   // 400 ms of sync work
  renderTable(results)                  // user saw nothing until now
})

Soluzione

button.addEventListener("click", async () => {
  button.classList.add("loading")       // instant feedback, painted first
  await scheduler.yield()               // let the browser paint
  const results = filterRows(allRows)
  renderTable(results)
  button.classList.remove("loading")
})
Scansiona il tuo sito gratis →
Advertise here