🔍 inp.works

Layout thrashing: reflows repetidos en un frame y cómo detenerlos

Qué ocurre

El navegador intenta recalcular el layout una vez por frame. Pero si tu código escribe un estilo, luego lee una propiedad de geometría (offsetWidth, getBoundingClientRect) y vuelve a escribir — en un bucle — cada lectura fuerza un layout nuevo y síncrono de la página. Un bucle sobre 100 elementos puede provocar 100 reflows completos en un frame.

El coste es proporcional al tamaño del DOM, así que el mismo código que va bien en una página pequeña destruye el INP en una página con miles de nodos.

Cómo reconocerlo

Cómo solucionarlo

Problema

items.forEach((el) => {
  el.style.width = base + "px"          // write
  const h = el.offsetHeight             // read → forced reflow, every iteration
  el.style.height = h * 2 + "px"        // write
})

Solución

const heights = items.map((el) => el.offsetHeight)  // all reads
requestAnimationFrame(() => {
  items.forEach((el, i) => {                          // all writes
    el.style.width = base + "px"
    el.style.height = heights[i] * 2 + "px"
  })
})
Escanea tu sitio gratis →
Advertise here