브라우저는 유저가 선택한 자원을 서버로부터 받아와서 유저에게 보여준다.
여기서 자원은 페이지 외에도 이미지, 비디오 등의 컨텐츠들도 포함된다.
이 자원들을 렌더링 과정을 통해 유저에게 보여준다.
렌더링 과정을 알아보자.
Render Tree는 실제로 화면에 그려질 Tree이다.
예를 들어 Render Tree를 구성할 때 visibility: hidden은 요소가 공간을 차지하고, 보이지만 않기 때문에 Render Tree에 포함이 되지만, display: none의 경우는 Render Tree에서 제외된다.
루트부터 노드를 순회하면서 노드의 정확한 크기와 위치를 계산하고 Render Tree에 반영한다.
%, vh, vw와 같은 상대적인 속성은 픽셀 단위로 변환된다.
Render Tree의 각 노드를 실제 픽셀로 변환한다.
이때 픽셀로 변환된 결과는 하나의 레이어가 아닌 여러 개의 레이어로 관리한다.
웹 인터렉션으로 인해 자바스크립트가 DOM< CSSOM 을 변경하는 경우 리렌더링이 발생한다.
1. 리플로우 : 레이아웃 계산을 다시 하는 것 (3.Layout)
2. 리페인트: 재결합된 렌더 트리를 기반으로 다시 페인트를 하는 것 (4.Paint)
.
.
.
.
브라우저 렌더링 방식은 크게 두가지로 나뉜다.
장점: 초기 로딩 속도가 빠름
단점: 요청시마다 새로고침이 되어 깜빡임 생김, 바뀔 필요가 없는 부분도 요청하게 됨.
=> 상위 노출, SEO, 최초 로딩이 빨라야 하는 사이트, 페이지마다 데이터가 많이 바뀌거나 네트워크가 느릴 때, 웹사이트에 상호작용이 별로 없을 때
장점: 빠른 속도와 서버 부하 감소, 변경된 부분의 데이터만 가져옴
단점: 모든 파일이 다운로드 되고 렌더링이 끝나기 전까지 사용자가 볼 수 있는 게 없다.
=> 보다 나은 ux, 사용자에게 보여줘야 하는 데이터의 양이 많거나 네트워크가 빠를 때, 상호작용이 많을 때
출처
https://velog.io/@jeju_daun/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EB%A0%8C%EB%8D%94%EB%A7%81-%EB%B0%A9%EC%8B%9D
https://tecoble.techcourse.co.kr/post/2021-10-24-browser-rendering/