🔍 inp.works

Принудительный синхронный layout: чтение геометрии после записи в DOM

Что происходит

Обычно layout происходит после завершения JavaScript, один раз за кадр. Но если вы изменили DOM и сразу читаете layout-свойство — offsetWidth, scrollHeight, getBoundingClientRect(), getComputedStyle() — браузер обязан остановиться и посчитать макет прямо здесь, синхронно, внутри вашей задачи, потому что ответ зависит от вашего несохранённого изменения.

Один принудительный layout дёшев на маленькой странице. На большом DOM или в цикле (что превращается в layout thrashing) он добавляет обработчику сотни миллисекунд.

Как распознать

Как починить

Проблема

grid.style.width = next + "px"            // write: layout is now dirty
const rect = cell.getBoundingClientRect()  // read → forced synchronous layout

Фикс

const rect = cell.getBoundingClientRect()  // read first, layout is clean
grid.style.width = next + "px"             // write after; browser lays out
                                           // once, before the next paint
Просканировать свой сайт бесплатно →
Advertise here