🔍 inp.works

Важкий обробник події: чому клік займає 500 мс і як це виправити

Що відбувається

Коли користувач клікає, браузер виконує обробник події до кінця, перш ніж зможе відмалювати наступний кадр. Якщо обробник робить сотні мілісекунд синхронної роботи — фільтрує великий масив, будує DOM, парсить JSON — сторінка заморожена рівно на цей час. Користувач не бачить жодної реакції, поки обробник не повернеться.

Це найчастіша проблема INP; у розбивці INP вона видно як довга фаза processing time.

Як розпізнати

Як виправити

Проблема

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

Виправлення

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")
})
Просканувати свій сайт безкоштовно →
Advertise here