rendering
DOM은 웹페이지에 대한 인터페이스로 브라우저가 웹페이지의 콘텐츠와 구조를 어떻게 보여줄지에 대한 정보를 담고있어요.
CRP
CRP의 주요 단계
INFO
💡 CRP (Critical Rendering Path)는 웹 브라우저가 HTML, CSS, 및 JavaScript와 같은 웹 페이지의 리소스를 받아서 실제로 화면에 페이지를 표시하는 과정을 의미해요. (이 과정은 웹 페이지의 로딩 시간과 성능에 중요한 영향을 미치므로 최적화하는 것이 중요해요!)
- 브라우저가 사용자가 요청한 주소를 방문해 htlm 파일 다운로드
- 브라우저의 렌더링 엔진은 HTML을 파싱해 Dom 노드로 구성된 트리(DOM)를 만들어요
- '2번'과정에서 css파일을 만나면 해당 cssvkdlfeh ekdnsfhemgksek.
- 브라우저의 렌더링 엔진은 이 css도 파싱해 css노드로 구성된 트리(CSSOM)를 만들어요
- 브라우저는 2번에서 만든 DOM노드를 순화하는데 여기서 모든 노드를 방문하는 것이 아니고 사용자 눈에 보이는 노드만 방문해요. 즉 display none과 같이 사용자 화면에 보이지 않는 요소는 방문해 작업하지 않아요. 이는 트리를 분석하는 과정을 조금이라도 빠르게 하기 위해서에요.
- '5번'에서 제외된 눈에 보이는 노드를 대상으로 해당 노드에 대한 CSSOM 정보를 찾고 여기서 발견한 CSS 스타일 정보를 이 노드에 적용해요.이 DOM노드에 CSS를 적용하는 과정은 크게 두가지로 나눌 수 있어요.
- 레이아웃: 각 노드가 브라우저 화면의 어느 좌표에 정확히 나타나야 하는지 계산하는 과정이에요. 이 레이아웃 과정을 거치면 반드시 페인팅 과정도 거치게 되어요.
- 페인팅: 레이아웃 단계를 거친 노드에 색과 같은 실제 유효한 모습을 그리는 과정이에요.
이렇게 모든 단계를 거친 최종 출력물은 웹 애플리케이션의 모든 콘텐츠와 스타일 정보를 가지게 되어요.
최적화 기법
CRP 최적화의 목적은 가능한 한 빠르게 웹 페이지를 렌더링하게 하는 것이에요. 몇몇 전략적인 최적화 기법들은 다음과 같아요.
- CSS와 JavaScript의 최소화 및 압축
- 파일의 크기를 줄여 빠른 로딩을 도와주어요.
- 인라인 CSS와 JavaScript의 사용 최소화
- 중요하지 않은 스타일이나 스크립트를 외부 파일로 분리하여 초기 렌더링을 가속화해요.
- 비동기 스크립트 로딩
- async나 defer 속성을 사용하여 JavaScript의 실행을 지연시킴으로써 블로킹을 방지해요.
- 중요한 CSS를 위쪽에 위치시키기
- 페이지의 위쪽 부분을 빠르게 렌더링하려면 중요한 스타일을 HTML 문서의 상단에 위치시켜야 해요.
- 웹 폰트 최적화
- 웹 폰트의 로딩 지연을 방지하기 위해 필요한 스타일만 불러오거나, font-display 옵션을 사용해요.
CRP 최적화는 웹 성능 향상과 사용자 경험 향상에 큰 영향을 미치므로 중요해요.
React 렌더링
React에서 렌더링은 컴포넌트가 UI를 구성하기 위해 JSX를 HTML로 변환하고 이를 브라우저에 반영하는 과정이에요. React의 렌더링 방식은 Virtual DOM 을 활용한 효율적인 UI 업데이트에 초점이 맞춰져 있습니다.
React의 렌더링 과정
상태(state)나 props 변경 감지 React는 컴포넌트의 state 또는 props 가 변경되면 자동으로 렌더링을 트리거해요
Virtual DOM 비교 변경된 컴포넌트의 새로운 Virtual DOM을 생성하고, 기존 가상돔과 비교하여 변경 사항을 찾아요.
DOM 업데이트 변경된 부분만 실제 DOM에 적용하여 최소한의 연산으로 성능을 최적화합니다.
. React 렌더링이 CRP에 미치는 영향
React는 Virtual DOM을 활용하여 변경된 부분만 반영하지만, 여전히 JS 실행 시간이 길어질 경우 CRP에 영향을 미칠 수 있어요. React 앱이 무거운 경우, 브라우저의 JS 실행 시간이 늘어나 First Contentful Paint(FCP) 나 Largest Contentful Paint(LCP) 와 같은 성능 지표가 저하될 수 있습니다.
특히, 클라이언트 사이드 렌더링(CSR)만 사용할 경우 JS가 실행될 때까지 화면이 빈 상태일 수 있습니다.
React 성능 최적화와 CRP 개선
- 초기 HTML을 서버에서 렌더링하여 클라이언트에서 빠르게 화면을 표시할 수 있도록 SSR을 사용해요
- React lazy , Suspense를 사용하여 불필요한 Js로딩을 줄여요.
- WebP 등의 이미지 포맷을 사용하여 용량을 최적화해요
- 폰트 로딩을 최적화해요.
- 불필요한 재렌더링을 방지하여 렌더링 속도를 향상 시켜요