🔍 inp.works

Manejador de eventos pesado: por qué un clic tarda 500 ms y cómo solucionarlo

Qué ocurre

Cuando un usuario hace clic, el navegador ejecuta tu manejador de eventos por completo antes de poder pintar el siguiente frame. Si el manejador realiza cientos de milisegundos de trabajo síncrono — filtrar un array grande, construir DOM, parsear JSON — la página queda congelada exactamente ese tiempo. El usuario no ve nada hasta que el manejador retorna.

Es el problema de INP más común y aparece en el desglose de INP como una fase larga de processing time.

Cómo reconocerlo

Cómo solucionarlo

Problema

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

Solución

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")
})
Escanea tu sitio gratis →
Advertise here