✨
Saltberry
GithubLinkedIn
  • 개요 Overview
  • 📝HTML/CSS
    • 구조 HTML
    • 스타일 CSS
      • z-index
  • 📦개발 Development
    • 개발 Implementation
    • 단어 Glosarry
    • 깃 Git
    • 해시 Hash
    • 노드 패키지 매니저 Node Package Manager
    • 브라우저 랜더링 Browser Rendering Process
    • 교차 출처 리소스 공유 CORS
    • 인터프리터 Interpreter
    • Object-oriented programming(OOP) 객체지향 프로그래밍
  • 💡CS 50
    • Computational Thinking
  • ✨자바스크립트 Javascript
    • 자바스크립트란 What is JavaScript
    • 표현식과 문 Expression Statement
    • 변수 Variable
    • 함수 Function
    • 참과 거짓 값 Truth Falsy
    • 배열 Array
    • Import Export
    • 스택과 큐 Stack Queue
    • 문서객체모델 Document Object Model
      • 개요 Overview
      • 도큐먼트 Document
      • HTMLCollection
      • getMethod
      • NodeList
      • childNodes, children
      • Event
      • live, static
      • Element
      • DOM Token
      • 속성 attribute
      • implementation
      • 노드 Node
      • HTMLElement
    • 브라우저 저장소 Cookie Web Storage
  • 🎁리액트 React
    • 리액트 톧아보기 Overview
    • Intro
      • 상태의 불변성 State Immutability
      • Props and State
      • Hooks
    • Concepts
  • 🚦타입스크립트 Typescript
    • Page 1
  • 🗃️리덕스 Redux
    • 왜 리덕스를 사용할까 Why Redux
    • 플럭스 Flux
  • 📬넥스트 Nextjs
    • Pages
  • ✅면접 Interview
    • Index
    • Implement experiences
    • Best practice for query parameter and fetch
  • 🚀TECH
    • Lists
    • Zustand
  • 🧬Algorithm
    • Types of algorithms
    • 이진수 변환 Binary Number
    • 후위 연산자 Postfix expression
    • 선택 정렬 Selection Sort
    • Find longest substring without repeating characters
    • 올바른 괄호 Valid Parentheses
  • 📔Mathematics
    • 다항식 Polynomial
  • 🗂️Database
    • 데이터베이스 Database
  • 📝Class
    • 자료구조 Data Structure
      • 배열 Array
    • C++ 프로그래밍
      • C++ 기초
    • 소프트웨어 공학 Software engineering
      • 소프트웨어 개요 Software overview
      • 소프트웨어 프로세스 Software process
    • 자바 Java
      • 자바와 객체지향 프로그래밍 Java and OOP(Object-oriented programming)
  • Java
    • 자바가 뭐지?
  • CA EI
    • CA EI
Powered by GitBook
On this page
  • DOM 트리 구조 생성
  • 레이아웃 Layout
  • 그리기 Painting
  • 리플로우 Reflow
  • 리페인트 Repaint
  1. 개발 Development

브라우저 랜더링 Browser Rendering Process

Last updated 1 year ago

브라우저는 사용자가 선택한 자원을 서버에 요청하고 받아와 브라우저 엔진을 통해 보여준다. 크롬 웹킷(Webkit), 파이어폭스는 개코 (Gecko) 엔진을 이용한다.

https://www.coupang.com 을 검색하면 쿠팡 서버에 파일 요청해서 (DNS가 실제 서버에 어디에 있는지 알고 있어서 자동으로 연결) 리소스를 다운받는다. 웹 페이지는 HTML/CSS/Javascript 으로 구성되어 있다.

DOM 트리 구조 생성

DOM(The Document Object Model)이란 HTML, XML 문서를 구조화된 표현으로 제공하여 스크립트, 프로그래밍 언어가 DOM 구조에 접근하여 사용할 수 있게 연결시켜준다. 표준 인터페이스로 제공한다.

DOM은 스크립트 언어를 통해 새롭게 생성하거나 수정할 수 있다. (DOM은 HTML과 자바스크립트를 이어주는 공간으로, 내가 작성한 HTML을 자바스크립트가 이해할 수 있도록 객체(object)로 변환한다.)

DOM은 node와 object로 구성되어 있다. Node란 각각의 개체 (p, b, br 등) 태그뿐만 아니라 텍스트, 속성까지 모든 것을 의미한다. Object는 생성하거나 수정할 수 있는 Property, Method, Event를 포함한다. (DOM은 자바스크립트로 해당 문서에 노드 추가, 삭제, 변경, 이벤트 처리, 수정 등을 가능케 하는 API를 제공한다.)

DOM은 트리 자료구조로 되어 있다.

서버에 요청한 리소스를 다운받아 랜더링 한다. DOM 트리 구축을 위해 HTML, CSS을 파싱(변환)한다.

  1. 변환: 브라우저가 HTML에 정의된 인코딩(i.e. UTF-8)으로 문자열로 변환한다.

  2. 토큰화: 브라우저가 문자열을 W3C 표준에 지정된 고유 토큰으로 변환한다.

  3. DOM 생성 : 마크업에 정의된 여러 태그 간의 관계를 해석해서 트리 구조 생성한다.

DOM과 CSSOM 생성 후 두개를 합쳐서 랜더트리를 생성한다.

레이아웃 Layout

뷰 포트 내에 각 노드들이 브라우저 화면에 어떤 위치에 어느 정도의 크기로 나타나야할지 정확하게 계산해서 박스모델로 노출한다. (크기, 위치, 색상 등의 스타일)

그리기 Painting

계산된 각 노드들을 화면에 실제로 그리는 작업을 진행한다.

리플로우 Reflow

사용자에 의해 HTML이 새롭게 추가되거나, 수정되었을 때 영향을 받는 모든 노드가 랜더 트리 생성, 레이아웃 단계를 거친다.

(리플로우 대표적인 속성) position, width, height, margin, padding, border, border-width, font-size, font-weight, line-height, text-align, overflow

리페인트 Repaint

리플로우된 노드를 다시 화면에 그린다.

(리페인트만 일어나는 속성) background, color, text-decoration, border-style, border-radius

📦
1)
1)
2)
3)
3)
4)
3)
6)