앞선 시리즈에서 나는 브라우저의 렌더링 과정을 알아보았다. 그 결과 렌더링의 최적화에 있어서는 리플로우와 리페인트를 최소화하는 과정을 가지는 것이 최적화에 있어서 가장 중요한 부분임을 깨닫게 되었다. 리플로우와 리페인트를 다시 정리해보고, 렌더링을 최적화하는 방법을 알아보도록 하자.
Reflow: 렌더 트리를 재구성 하기 위한(Layout) 웹 브라우저 프로세스의 이름
리플로우는 브라우저에서 사용자를 차단하는 작업이므로, 개발자가 리플로우 시간을 향상하는 방법을 이해하고 다양한 문서 속성(DOM 심도, CSS 규칙 효율성, 다양한 스타일 유형 변경)이 리플로우 시간에 미치는 영향을 이해하는 것이 중요하다.
간혹 문서의 단일 요소를 리플로우 하려면 상위 요소 및 이어지는 모든 요소도 리플로우 해야 할 수 있다.
예로써 브라우저 창의 크기 변경, 계산된 스타일이 수반되는 자바스크립트 메소드 사용, dom에서의 요소 추가 또는 삭제, 요소 클래스 변경 등이 일어날 때 발생함.
Repaint: 렌더 트리를 기준으로 다시 화면을 그리는(paint) 웹 브라우저 프로세스의 이름 (리플로우가 일어날 시 함께 일어나나, 리페인트만 될 때도 있음)
리페인트는 리플로우의 부분집합이다(리페인트⊂리플로우) 리플로우가 일어날 때에는 반드시 리페인트가 뒤 따라오지만 스크립트나, 속성의 변화가 레이아웃을 건들지 않는 경우 리페인트만 일어날 수도 있다.
레이아웃을 건들지 않는 예로써 노드의 background-color, visibillty, outline 등의 스타일 변경 시에는 레이아웃 수치가 변경되지 않으므로 Reflow 과정이 생략된 Repaint 과정만 일어나게 된다.
여러 Layer로 나눠지는 Raster 픽셀들을 우리가 실제로 보는 화면처럼 하나의 비트맵으로 합성해주는 단계(리플로우와 리페인트 둘다 거치지 않는다) = 가장 큰 이점을 가진 스타일의 변화 방법
쌓임 맥락(z-index) 순으로 하나의 결과물로 합치는 과정
예로써 transform, opacitiy, cursor, orphans, perspective 등이 해당한다.
기본적으로 앞서 말했던 Reflow, Repaint를 지양하고 같은 기능이라면 Composite로 대체한다.
우선 왼쪽위의 캡쳐버튼을 누르고 정지하여 원하는 시간동안의 렌더링과정을 확인할 수 있다.
프레임을 클릭하고 보이는 노란색이 Layout과정, 보라색이 Paint과정, 초록색이 Composite 과정이다. 프레임과 과정등을 확인하고 리플로우와 리페인트가 얼마나 일어나는지 확인하자
이와 같이 이 옵션을 체크해 줄 경우 페인트 되는 부분(초록색 박스)을 화면상으로 확인할 수 있다.
ex) 애니메이션이나 호버를 했을 때 계속 녹색영역이 유지된다면 지속적으로 페인팅 되는 것이다.
++ transform의 경우 페인팅이 계속해서 일어나지 않는다.
https://pagespeed.web.dev/?utm_source=psi&utm_medium=redirect&hl=ko
https://developer.chrome.com/docs/lighthouse/overview/
구글에서 제공하는 페이지 속도 측정 사이트에서 페이지의 최적화 점수를 알아내고 자신의 점수를 올려보도록 하자.
font-display: swap
)으로 띄워준다.렌더링 최적화를 위해서는 여러 조건들을 지켜야 하는것을 깨달았다. 이전에 state로 css에서 right나 margin 속성을 조절 하려고 했던 나를 반성했다.
styled-components의 작동방식이 문득 궁금해졌다. 찾아보니 선언해주는 컴포넌트 마다 스타일 템플릿을 만들고 랜덤한 문자열로 className을 만들어 해당하는 스타일을 적용 시키는 방식이라고 한다.
이전에 만들었던 캐러셀에서 무의식적으로 transform transition 을 넣었던거 같은데 결과적으론 잘 적용시켰지만 이번 기회로 왜 transform을 적용시키는지를 깨닫게 되었던 것 같다.
참고자료
https://velog.io/@bumsu0211/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EB%A0%8C%EB%8D%94%EB%A7%81-%EA%B3%BC%EC%A0%95%EA%B3%BC-%EC%B5%9C%EC%A0%81%ED%99%94#5-browser-caching
https://www.youtube.com/watch?v=sJ14cWjrNis
https://im-designloper.tistory.com/100
https://wit.nts-corp.com/2017/06/05/4571