11월 24일 TIL

임덤덤·2022년 11월 24일

VDOM(Virtural DOM)

VDOM에 들어가기 앞서 DOM이란?

  • MDN문서에서 설명하는 DOM은
    • 문서 객체 모델(The Document Object Model, 이하 DOM) 은 HTML, XML 문서의 프로그래밍 interface 이다. 라고 적혀있다
    • 즉 우리가 HTML에 작성하는 코드를 상호작용하는 객체라고 생각하면 될것같다

DOM의 구조

  • 위 사진처럼 DOM의 구조는 트리 구조로 되어있고, 자바스크립트와 같은 스크립팅 언어로 조작이 가능하다

DOM이 작동하는 방식

  • DOM은 애플리케이션의 UI상태가 변경되는걸 추적하고 변경사항이 확인될때마다 트리 전체를 업데이트를 진행하는 식으로 작동하게 됨

전체를 그리면 비효율적인거 아니야?

  • DOM을 자주 조작하게 되면 트리를 다시 그려내기 때문에 성능에 영향을 주게됨
    • DOM 렌더링은 브라우저의 구동능력에 의존하기 때문에 조작속도가 느려질 수 있음

DOM 조작속도가 느려지는 이유

  • 트리구조는 저장된 데이터를 효과적으로 탐색하기 위해 사용되다 보니 빠른 자료탐색이 장점임
    • 그렇기 때문에 DOM은 스크립팅 언어가 접근하고 탐색하는데 있어 속도가 빠르기 때문에 변경이나 업데이트가 쉽고 빠름
  • 결국 이는 잦은 변경이나 업데이트가 되는건 브라우저의 랜더링이 많이 일어난단 뜻을 의미함
    • 수정된 부분의 트리만 재구성이 된다면 문제가 없겠지만 DOM은 업데이트 요소와 그 자식요소들에 의해 DOM트리 전체를 재구축하고 재랜더링을 거쳐서 변경된 부분의 UI를 업데이트 해야함
    • DOM 자체가 느린것은 아니고 웹브라우저가 CSS를 다시 연산하고 레이아웃을 구성하고, 페이지를 다시 그리는 시간이 허비되면서 느려지는것
  • 이는 수정되지않은 부분의 불필요한 랜더링도 같이 발생하기 때문에 비 효율적이고 성능 저하가 발생됨

어떤 상호작용을 하는데?

  • 우리가 프로그래밍 언어로 작성하면 그걸 DOM의 구조에 접근할 수 있는 방법을 제공하게 해줌
    • 이런 상호작용으로 구조, 스타일, 내용등을 변경 할 수있게 해줌
  • 나만의 언어로 표현하자면 자유도가 있는 하얀 스케치북 도화지라고 생각함
    • 내가 생각해서 그려낸걸 그대로 볼 수 있기 때문에
    • 이렇게 DOM에 대한 설명이 길어졌지만 이를 제대로 알아야 VDOM이 왜 생겨났고 왜 좋은지 알 수 있기 때문에 좀 길어진 부분.. 이제 VDOM으로 넘어간다

VDOM이란?

  • React라는 라이브러리에 존재하는 가상 DOM 객체
    • VDOM을 쉽게 정의하면 일반 DOM의 가벼운 복사판이라고 할 수 있다

🧐 그래서 왜 VDOM이 생긴건데?

  • 위에서 DOM 설명을 기준으로 말 해볼수 있을것 같다.

Real DOM의 단점

  • 변경사항이 감지되면 모든 Tree 구조를 재구성 한다
  • 재구성하면서 브라우저의 UI 리랜더링이 발생한다
    • CSS,레이아웃등등..
  • 변경이나 업데이트가 잦다보니 변경사항이 감지될때마다 위 상황이 발생함
  • 그러면서 브라우저의 성능이 저하됨

결론

  • 위 이유처럼 속도가 느려지거나 버그가 발생하거나 브라우저가 죽는 등등의 일을 개선하고자 VDOM이 만들어지게됨

어떻게 동작해?

  • VDOM은 DOM의 상태를 메모리에 저장후 변경 전과 변경 후의 상태를 비교한 뒤에 최소한의 변경사항만 반영함
    • VDOM은 DOM의 상태나 UI요소를 메모리 위에 계속 유지시키고 DOM에 변경이 있을 경우 해당 변경을 반영하게 되어있음
    • 하지만 가상 DOM객체는 화면에 표시되는 내용을 실제 DOM처럼 직접 변경하는것이 아님
    • 실제 DOM을 조작하는건 변경사항을 브라우저 화면에 그리기 때문에 느리지만 VDOM을 조작하는건 실제 브라우저에 화면에 그리는게 아니기 때문에 훨신 속도가 빠름

근데 어떻게 Real DOM보다 V DOM이 더 빨라?

  • React는 새로운 요소가 UI에 추가되면 트리구조로 표현이 되는 VDOM이 만들어짐
    • 이런 요소의 상태가 변경되면 다시 새로운 VDOM 트리가 만들어짐
    • 그리고 둘의 차이를 비교해서 작업이 완료되면 VDOM은 실제 DOM에 변경을 적용 할 수 있는 최상위 방법을 계산함
    • 이렇게 되면 실제 DOM은 최소한의 작업만 수행해도 렌더링을 할 수 있게됨
  • 이로인해 최소한의 작업으로 최적화된 브라우저 랜더링을 이룰 수 있고 이는 성능개선으로 이어지는 효과를 볼 수 있음

참고 자료 출처

profile
응애🐣 예비 개발자 입니다.

0개의 댓글