Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- css박스 모델
- 코딩 자율학습 html + css + 자바스크립트]
- JavaScript
- 이벤트버블링
- HTML
- 코딩 자율학습
- react
- CPU
- 혼자 공부하는 컴퓨터구조+운영체제
- 메모리와 캐시 메모리
- do it! html+css+자바스크립트 웹 표준의 정석
- 코딩 자율학습 html + css + 자바스크립트
- cpu 성능 향상 기법
- 코딩자율학습
- propschildren
- 브라우저 렌더링 원리
- 코딩
- css배경
- Do it
- https://api.jquery.com/
- CSS
- Git
- html 필수태그
- css필수 속성
- do it! 한권으로 끝내는 웹 기본 교과서 html+css+자바스크립트 웹 표준의 정석
- 비대칭키 암호화
- TS
- 자바스크립트
- JS
- 이벤트
Archives
- Today
- Total
게으른 나에게
[웹 개발 지식] - 브라우저 렌더링 원리 본문
브라우저 렌더링 원리
- 웹 브라우저는 HTML, CSS, JavaScript가 조화를 이루며 작동.
- 이처럼 각 요소가 올바르게 동작하도록 하려면, 브라우저가 이 코드들을 어떤 순서로 해석하고 처리하는지, 즉 렌더링 순서를 이해하는 것이 중요.
- 이를 통해 더 최적화된 코드를 작성 가능
브라우저 렌더링 단계 개념
HTML 파싱 및 DOM 트리 생성
- 서버로부터 받은 HTML 파일을 브라우저가 해석(파싱)해야 함 → HTML 파일은 문자열로 이루어져 브라우저 이해 불가능
- 파싱을 통해 HTML 파일 해석 → 페이지의 구조와 내용을 표현하는 DOM Tree로 변환하는 단계.
- 이 트리는 각 HTML 태그와 텍스트 노드를 계층 구조로 나타냄.
CSS 파싱 및 CSSOM 트리 생성
- HTML 문서에 포함되거나 외부에서 불러온 CSS 파일을 파싱.
- 스타일 규칙과 정보를 담은 CSSOM Tree를 생성.
- 이 트리는 각 요소에 어떤 스타일이 적용될지 결정하는 데 사용.
렌더 트리(Render Tree) 구성
- DOM 트리와 CSSOM 트리를 결합.
- 실제 화면에 표시될 요소들만을 포함하는 렌더 트리를 생성.
- 브라우저 화면에 보여지지 않는 것들 포함 X
- display: none 속성, 렌더 트리 제외
- visibility: hidden 속성, 렌더트리 포함
레이아웃(Layout 또는 Reflow)
- 렌더 트리를 바탕으로 각 요소의 위치와 크기를 계산하는 단계.
- 뷰포트(화면) 내에서 요소들이 어떻게 배치될지 결정.
- 이 단계에서는 박스 모델(Box Model)을 기반으로 상대적인 값들이 픽셀 단위로 변환.
페인트(Paint)
- 계산된 레이아웃 정보를 바탕으로 각 요소를 실제 픽셀로 변환하여 화면에 그리는 단계.
- 픽셀로 변환된 결과 → 하나의 레이어 x, 여러개의 레이어로 관리
- 요소의 색상, 배경, 텍스트, 테두리 등 시각적 스타일이 이 단계에서 렌더링 됨.
합성(Compositing)
- 복잡한 웹 페이지는 여러 레이어로 분리되어 처리.
- 브라우저는 각 레이어를 GPU와 협력하여 합성(composite)함으로써 최종 화면을 구성.
JavaScript가 DOM이나 스타일을 변경하면 다시 레이아웃(리플로우)나 페인트(리페인트)가 발생하여 화면이 업데이트 됨. 이러한 전체 과정을 ’중요 렌더링 경로(Critical Rendering Path)’라고 부르며, 웹 성능 최적화의 핵심.
브라우저 렌더링 순서
- HTML 파일 수신 → HTML 파싱
- 서버에게 HTML, CSS, JS 파일 요청
- 브라우저는 서버로부터 HTML 파일을 받아 파싱하여 DOM 트리 생성.
- CSS 파일 수신 → CSS 파싱
- HTML 내에 포함된 또는 참조된 CSS 파일을 다운로드하고 파싱하여 CSSOM 트리 생성.
- 렌더 트리 생성
- DOM 트리와 CSSOM 트리를 결합해 실제로 렌더링 될 요소들만 포함하는 렌더 트리를 구성.
- 레이아웃 (Layout) 계산
- 렌더 트리의 각 요소의 위치와 크기를 계산하여, 화면 내에서 정확하게 배치.
- 페인트 (Paint) 실행
- 레이아웃 단계에서 계산된 정보에 따라 각 요소를 실제 픽셀로 그려서 화면에 렌더링.
- 합성 (Compositing)
- 여러 레이어로 구성된 페이지의 경우, 각 레이어를 GPU를 사용해 합성하여 최종적으로 화면에 출력.
렌더링 성능 최적화 방법
1. 불필요한 리소스 제거 및 파일 크기 최적화
- 파일 압축:
- HTML, CSS, JavaScript 파일을 압축(minify)하여 불필요한 공백과 주석을 제거하면 전송 데이터의 크기가 줄어들어 로딩 시간이 단축.
- 이미지 최적화:
- 이미지 포맷을 상황에 맞게 선택하고, 압축 도구를 사용해 파일 크기를 줄입니다. 또한, 반응형 이미지를 활용해 기기별 적절한 크기의 이미지를 제공할 수 있습니다.
2. 외부 리소스 로딩 최적화
- 비동기 및 지연 로딩:
- <script> 태그에 async나 defer 속성을 사용하여 자바스크립트 파일이 HTML 파싱을 차단하지 않도록 합니다.
- 레이지 로딩(Lazy Loading):
- 화면에 즉시 필요하지 않은 이미지나 동영상은 사용자가 스크롤할 때 로드되도록 하여 초기 렌더링 시간을 단축합니다.
3. CSS와 자바스크립트 최적화
- CSS 최적화:
- 사용하지 않는 CSS를 제거하고, 복잡한 선택자나 중복된 스타일 규칙을 최소화하여 CSS 파싱 시간을 줄입니다.
- 자바스크립트 최적화:
- DOM 조작을 한 번에 묶어서 실행하거나, 변경 사항을 배치(batch) 처리하여 리플로우(Reflow)와 리페인트(Repaint)의 빈도를 줄입니다.
4. 레이아웃 및 페인트 최적화
- 리플로우와 리페인트 최소화:
- DOM 요소의 크기나 위치를 잦은 변경 없이 한 번에 적용하도록 코드를 작성합니다. 예를 들어, 스타일을 변경할 때 여러 번 직접 수정하기보다는 클래스를 추가/제거하는 방식으로 처리합니다.
- 변경 사항 캐싱:
- DOM이나 레이아웃 관련 값을 미리 저장해두고, 반복 계산을 피함으로써 불필요한 계산을 줄입니다.
5. 합성 레이어 활용 및 GPU 가속
- 합성 레이어 분리:
- 애니메이션이나 스크롤 등 자주 변경되는 요소에 will-change 속성을 지정하면, 브라우저가 해당 요소를 별도의 레이어로 분리하여 GPU를 통한 합성을 수행할 수 있습니다.
- GPU 가속 활용:
- CSS transform과 opacity 같은 속성은 GPU 가속을 사용할 수 있으므로, 가능한 경우 이러한 속성을 활용해 렌더링 부하를 줄입니다.
6. 브라우저 캐싱 및 서버 최적화
- 캐시 활용:
- HTTP 캐시 정책(Cache-Control, ETag 등)을 적절히 설정하여, 재방문 시 불필요한 리소스 재다운로드를 막습니다.
- 서버 압축:
- 서버 측에서 GZIP이나 Brotli 압축을 적용하면 클라이언트로 전송되는 데이터 크기를 줄여줍니다.
'My Study > CS' 카테고리의 다른 글
[웹 개발 지식] - Reflow, Repaint (1) | 2025.04.03 |
---|---|
[클라우드 서비스] - SaaS (Software as a Service) (0) | 2025.03.25 |
[암호학] - 대칭 키 암호화와 비대칭 키 암호화 (1) | 2025.03.25 |
[CS] - 코드 최적화(Code Optimization) (0) | 2025.03.24 |
[CS] - 컴파일러(Compiler)와 인터프리터(Interpreter) (1) | 2025.03.24 |