🔍 inp.works

Manipulador de eventos pesado: por que um clique leva 500 ms e como corrigir

O que acontece

Quando um usuário clica, o navegador executa seu manipulador de eventos até o fim antes de poder pintar o próximo frame. Se o manipulador faz centenas de milissegundos de trabalho síncrono — filtrar um array grande, construir DOM, parsear JSON — a página fica congelada exatamente por esse tempo. O usuário não vê nada até o manipulador retornar.

É o problema de INP mais comum e aparece no detalhamento do INP como uma longa fase de processing time.

Como reconhecer

Como corrigir

Problema

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

Correção

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")
})
Escaneie seu site gratuitamente →
Advertise here