리플로우 리페인트
- 브라우저는 HTML, StyleSheets를 해석한다. 그리고 HTML 문서의 해석이 끝나면 ”DOM”트리를 만들고, StyleSheets 문서의 해석이 끝나면 ”스타일 규칙”을 만듭니다.
- 렌더 트리 : 위에서 만들어진 ”DOM”트리와 ”스타일 규칙”을 합쳐서 렌더 트리를 만든다. 그리고 여기에서 배치가 되어서 요소들의 레이아웃을 위치시킨다.
- 그리기 : 이름 그대로 렌더 트리가 탐색되고, paint 메서드가 호출되어서 UI 기반의 구성요소를 사용해서 그린다고 한다.
- Reflow : 앞서 ”렌더 트리”의 과정에서, 요소들의 레이아웃 위치를 렌더 트리에 구성하는데 거기서 Reflow가 호출되는데, 우선 기본적으로 최초에 한번 실행이 되고, 이후에 요소들의 레이아웃에 영향을 주는 변화가 생기면 다시 렌더 트리를 구성해야한다. 이것을 Reflow라고 부른다고 한다.
그러면 새로운 요소(엘리먼트, 노트)가 추가되거나 또는 지워지거나, 위치의 변경. 크기의 변경, 위치값이나 크기가 상대값으로 되어있다면 브라우저의 크기가 변경될 때도 발생할 것이다.
그럼 reflow가 늘어날수록 렌더링 속도는 느려지고 성능은 저하될 것이다.
- Repaint
Repaint는 Reflow가 발생하면 자연스럽게 Repaint 도 발생한다. 아닌 경우도 있다. 레이아웃에 영향을 주지 않는 엘리먼트 개별의 변화에서는 Reflow가 발생하지 않고 Repaint만 발생한다. ex) color, background-color