리플로우(레이아웃 또는 재레이아웃이라고도 함)은 브라우저가 페이지에 있는 요소의 위치, 크기 및 레이아웃을 다시 계산할 때 발생합니다. 이 프로세스는 요소가 추가, 제거, 크기 조정되거나 가시성이 변경되는 등 페이지 레이아웃이 변경될 때마다 발생합니다. 더 복잡하고 시간이 많이 걸리는 작업입니다
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> const box = document.getElementById('box'); // Triggering a reflow by changing width and height box.style.width = '200px'; box.style.height = '200px'; // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
페이지 레이아웃에 영향을 미치는 사항을 변경하는 경우 브라우저는 다음을 수행해야 합니다.
한 번의 변경으로 많은 요소가 영향을 받는 경우 리플로우에 많은 비용이 들고 사이트 성능이 저하될 수 있습니다.
다시 그리기(또는 다시 그리기)는 요소의 시각적 속성이 변경되지만 레이아웃은 변경되지 않을 때 발생합니다. 위치나 레이아웃을 다시 계산하지 않고 요소의 모양만 업데이트하면 되기 때문에 리플로우보다 비용이 저렴합니다. 다시 그리기는 레이아웃이 다시 계산된 후(둘 다 필요한 경우) 또는 색상이나 가시성과 같이 레이아웃에 영향을 주지 않는 속성이 변경될 때 발생합니다.
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
다시 그리기에는 레이아웃 다시 계산이 포함되지 않으므로 리플로우보다 빠르지만 여전히 페이지의 일부를 다시 그려야 하므로 시간이 좀 걸립니다.
DOM 조작 최소화 : DOM 업데이트 일괄 처리(앞서 언급한 대로) 또는 DocumentFragment와 같은 기술을 사용하여 한 번에 여러 항목을 변경하는 대신 하나씩.
레이아웃 스래싱 방지: 동일한 주기에서 레이아웃 속성(예: offsetHeight)을 읽고 즉시 쓰기(레이아웃 변경)를 수행하면 레이아웃 스래싱이라고 알려진 리플로우가 강제 실행됩니다. 이를 방지하려면 DOM 속성 읽기 및 쓰기를 서로 다른 단계로 분리하세요.
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> const box = document.getElementById('box'); // Triggering a reflow by changing width and height box.style.width = '200px'; box.style.height = '200px'; // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
CSS 클래스 사용 : 개별 스타일을 수정하는 대신 CSS 클래스를 사용하여 변경하세요. 브라우저는 클래스 전환을 보다 효율적으로 처리합니다.
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
CSS 복잡성 감소: 리플로우를 유발할 수 있는 깊게 중첩된 요소와 지나치게 복잡한 CSS 규칙을 피하세요.
레이아웃에 영향을 주지 않고 요소를 숨기려는 경우 display: none 대신 visible: hide를 사용하세요. display: none은 리플로우를 트리거하는 반면 visible: hide는 다시 그리기만 트리거합니다.
위 내용은 Javascript의 리플로우 및 리페인트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!