Document Object Model

Dom에 대해서 알아보자.
Nov 12, 2023
Document Object Model
 
 
목차
 
 

실제 돔(Real DOM)

 

Browser 로딩 과정

notion image
출처 : IMQA Blog
 
브라우저는 파싱 → 스타일 → 레이아웃 → 페인트 → 합성 등의 과정을 거친다.
그 이후, JS 혹은 CSS를 통해 업데이트를 할 경우, reflow 혹은 repaint 과정을 수행한다.
 

1. parsing(파싱)

브라우저가 HTML을 읽는 과정
 
  • HTML(DOM트리) 해석과정
notion image
  • CSSOM(CSS DOM트리) 해석과정
notion image
 
 

2. Style(스타일)

notion image
  • HTML , CSS를 해석하는 과정을 거친 이후, 스타일을 매칭시켜주는 과정을 통해
    • Render Tree를 구성한다.
  • 렌더 트리엔 page를 렌더링하는 데 필요한 노드만 포함시킨다.
 

3. Layout(레이아웃)

notion image
  • 노드의 위치와 크기를 계산한다
  • %로 지정된 값은 px 단위로 측정&계산된다
  • 경우에 따라 reflow 라고도 한다
 

4.paint(페인트)

notion image
  • 3까지의 과정이 완료 된 이후, 브라우저가 ‘Paint Setup’을 발생한다.
  • Render Tree를 화면의 px로 변환한다.
  • 위치와 관계없는 css속성(배경색, 투명도, 위치조정, 그림자효과 등)을 적용한다.
 

5.Compositing(합성)

  • 화면에 표시하기 위해 페이지에서 페인트된 부분을 합치는 과정이다
한마디로, 4의 위치와 관계없는 css속성들을 합성하는 과정.
 

성능

1. reflow , repaint

  • 위에 적은 브라우저 로딩과정을 렌더링이라고 한다.
  • 렌더링 과정은 상황마다 계속 반복하여 발생할 수 있다. (re-rendering)
  • 브라우저는 성능적으로 렌더링 과정과 밀접한 관계가 있다.
  • reflow(=Layout)은 다음과 같은 경우에 발생한다.
    • element의 생성 및 삭제
    • CSS의 높이 및 크기 수정 업데이트
  • repaint(=paint)는 다음과 같은 경우에 발생한다.
    • 위치와 관계없는 css 속성의 업데이트
 

2. 브라우저에게 치명적인 issue

  • 브라우저는 반복된 랜더링에서, reflow가 순간적으로 많이 발생할 수록
    • 성능적으로 속도저하라는 치명적인 이슈가 생긴다.
      notion image
       
       

       

      가상 돔(Virtual DOM)

      Real DOM의 흐름을 보면, 업데이트(변경)가 있을 경우, Render Tree를 재생성하고, Layout을 만들고 paint를 하는 과정(=렌더링)이 전체적으로 발생하는데, 이러한 과정은 브라우저가 연산을 많이 해야한다는 말과 같으며 전체적으로 보면 프로세스를 비효율적으로 구성한단 말과 같다.
      그래서 등장한 개념이 React의 가상돔(Virtual DOM)이다.
      업데이트가 있을 때, 구 가상돔(Old Node)과 새 가상돔(New Node)을 비교하여 업데이트된 내용만 DOM에 적용하는 컨셉이며, 렌더링과정을 줄임으로써 UI 반응 속도를 높일 수 있다.
      notion image
      notion image
       
      간추려 정리하자면,
  • 잦은 DOM 조작은 비용이 많이 들고 속도가 느려진다.
  • React는 가상돔(Virtual DOM)을 사용하여 성능(속도)를 향상시키는 방법을 채택했다.
  • 가상돔(Virtual DOM)의 component는 지속적으로 관찰하여 상태 변경을 감지하려 시도한다.
  • 가상돔(Virtual DOM) 이전, 이후 비교(diff)는 재조정 알고리즘을 사용하여 효율적으로 처리한다.
  • 비교 결과 차이가 발생하면 실제돔(Real DOM)에 반영해 UI를 업데이트 한다.
 
Share article
RSSPowered by inblog