🔍 inp.works

강제 동기 레이아웃: DOM에 쓴 뒤 기하 속성 읽기

무슨 일이 일어나는가

보통 레이아웃은 JavaScript가 끝난 후 프레임마다 한 번 일어납니다. 하지만 DOM을 바꾼 직후 레이아웃 속성 — offsetWidth, scrollHeight, getBoundingClientRect(), getComputedStyle() — 을 읽으면, 답이 보류 중인 변경에 의존하므로 브라우저는 그 자리에서 동기적으로, 작업 안에서 레이아웃을 계산해야 합니다.

강제 레이아웃 한 번은 작은 페이지에서는 저렴합니다. 큰 DOM이거나 루프에서 반복되면(레이아웃 스래싱이 됨) 핸들러에 수백 ms를 더합니다.

알아보는 법

해결 방법

문제

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