실제 DOM 조작 시 변경 사항이 어떻게 처리되는지, 그리고 리플로우(Reflow)와 리페인트(Repaint)가 언제 발생하는지에 대해 좀 더 구체적으로 설명드리겠습니다.
작은 변경이라도 리플로우와 리페인트는 발생할 수 있지만, 항상 그런 것은 아닙니다. DOM 조작이 리플로우 및 리페인트를 일으키는지 여부는 다음과 같은 요소에 따라 다릅니다:
display
, width
, height
)이 변경되면 리플로우가 발생할 수 있습니다.다음 예제는 리플로우와 리페인트가 언제 발생하는지 보여줍니다:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Reflow and Repaint Example</title>
<style>
#example {
width: 200px;
height: 100px;
background-color: lightblue;
}
</style>
</head>
<body>
<div id="example">Example Div</div>
<button id="changeColorBtn">Change Color</button>
<button id="changeSizeBtn">Change Size</button>
<script>
document.getElementById('changeColorBtn').addEventListener('click', function() {
// 이 경우 리페인트만 발생.
document.getElementById('example').style.backgroundColor = 'lightcoral';
});
document.getElementById('changeSizeBtn').addEventListener('click', function() {
// 이 경우 리플로우와 리페인트가 발생.
document.getElementById('example').style.width = '300px';
document.getElementById('example').style.height = '150px';
});
</script>
</body>
</html>
위 예제에서:
changeColorBtn
버튼을 클릭하면 background-color
가 변경되고, 리페인트가 발생합니다.changeSizeBtn
버튼을 클릭하면 요소의 크기가 변경되며, 이는 리플로우와 리페인트를 모두 유발합니다.가상돔을 사용할때
: 가상돔을 사용하면 리플로우와 리페인트는 다음과 같은 과정을 거쳐 효과적으로 관리됩니다:
리액트가 리플로우, 리페인팅을 최소화하는 방법