DOM에 대해서

CashCash·2021년 1월 20일
0

web

목록 보기
4/5

DOM(Document Object Model)

  • Document Object Model의 약자
  • 브라우저를 이해할 수 있는 자신들만의 오브젝트로 변환하게 되는 것
    ex) HTML의 <tag>가 javascript의 node라는 오브젝트로 변환됨.

DOM 과정

  • DOM node는 DOM API를 쓰는데 꼭 필수적인 인터페이스이다.

  • node

    여러 가지 DOM 타입들이 상속하는 인터페이스이며 그 다양한 타입들을 비슷하게 처리할 수 있게 한다

  • 이 node라는 오브젝트는 EventTarget이라는 오브젝트를 상속한다. 즉 모든 node는 이벤트가 발생할 수 있다. document, element(HTMLElement, HTMLDivElement 등), text ... 은 node를 상속한다. 즉 모든 요소에서 이벤트가 발생 가능하다.eventTarget은 3가지 method가 있다.
    addeventListener은 결국 eventTarget에서 지원해주는 API였다.

part 1

  • 브라우저가 웹페이지를 읽어서 한 줄씩 DOM트리로 변환하게 됨. (=브라우저가 이해할 수 있도록 자신들만의 오브젝트 나무로 만들어 나가는 과정)

part 2

  • html에 있는 각각의 태그들이 DOM요소랑 하나씩 맞물려짐.(=각 태그에 상응하는 DOM트리요소가 있다)
    ex) `<h1>` = HTMLHeadingElement, `<text>` = TextNode

개발자도구에서 원하는 부분 클릭후 $0을 하면 그 부분이 모두 나오게됨.
$0.childNodes => 모든 node들을 받아오게 됨 parentNode, nextSibling 등등 사용

CSSOM (CSS Object Model)

  • DOM + CSS = CSSOM

  • CSSOM에는 우리가 정의한 스타일 뿐 아니라 브라우저에서 기본적으로 설정된 모든 속성값들 cascading에 따라 설정된 모든 css값들이 정의돼 있다.

  • DOM + CSSOM = Render Tree

  • Render Tree는 궁극적으로 사용자에게 보여지는 요소들로만 구성됨. Render Tree에 head부분이 포함되지 않는 이유는 사용자 눈에 절대 보여지지 않기 때문이다.

  • display: none이라고 설정된 태그는 최종 Render Tree에는 포함 안 됨.
    opacity:0, visibility: hidden은 눈에는 안보이지만 Render Tree에 포함됨.

Critical Rendering Path

  • 성능이 좋은 웹 페이지를 만들기 위해 중요!
  • 브라우저가 url을 입력하면 아래 과정이 이루어진다.
    1. requests/response : html파일 요청
    2. loading : 데이터 로딩
    3. scripting : html을 한줄한줄 읽어 DOM요소로 변환하는 과정
    4. rendering
    5. layout : Render Tree 정보를 기반으로 window에서 어디에 어떻게 위치시킬지를 구상하게됨
    6. painting : 바로 그림그리는 것이 아니라 각각 부분을 잘게잘게 나누어 미리 준비해 놓는다.
    레이어 별로 paint를 준비해만 놓는다.
    브라우저가 성능개선을 위해 스스로 준비해 놓는것!
    레이어를 많지 않게 하는 것이 좋다.

  • 하는 일에 따라 크게 construction 파트와 operation 파트 2가지 파트로 나눌 수 있다

1. construction 파트(DOM + CSSOM + RenderTree) :

  • 최대한 요소를 적게해 트리를 작게 만드는 것이 성능에는 좋음

2. operation 파트(layout + paint + composition) :

  • composition : 차곡차곡 브라우저 위에 표시한다.
    transition은 composition만 일어난다.
    하지만 색상이 바뀌거나 다른 요소의 위치를 변경시키는 일이 발생한다면 layout과 paint가 다시 이루어져야 해서 성능이 나빠질 수 있다.
profile
studying frontend

0개의 댓글