🔍 inp.works

Ciężka obsługa zdarzenia: dlaczego kliknięcie trwa 500 ms i jak to naprawić

Co się dzieje

Gdy użytkownik klika, przeglądarka wykonuje obsługę zdarzenia do końca, zanim może narysować kolejną klatkę. Jeśli obsługa wykonuje setki milisekund synchronicznej pracy — filtrowanie dużej tablicy, budowanie DOM, parsowanie JSON — strona jest zamrożona dokładnie na ten czas. Użytkownik nie widzi nic, dopóki obsługa nie zwróci sterowania.

To najczęstszy problem z INP; w rozbiciu INP widać go jako długą fazę processing time.

Jak rozpoznać

Jak naprawić

Problem

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

Poprawka

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")
})
Przeskanuj swoją stronę za darmo →
Advertise here