inflearn logo
강의

講義

知識共有

しなびろ JavaScript

01. DOM API の基本 - (4 of 6) innerHTML and its inefficiency

virtual dom과 관련된 인식 피드백

67

gggorock

投稿した質問数 6

0

안녕하세요.

강의 내용이 좋아서 재밌게 잘 보고 있습니다.

 

피상적으로 virtual dom을 접했을때는 virtual dom과 dom을 비교하는 글들위주로 보다보니 dom은 전체를 렌더링해서 느리고 virtual dom은 일부만 조작해서 성능이 향상된다는 인식이 있었는데요.

강의를 듣다보니 virtual dom의 기능이 이런 방향과 다른결이라고 느꼈습니다.

 

강의에서 이해한 내용과 찾아본 지식을 종합해서 virtual dom에 대한 나름대로의 정리를 해보았는데요.

제대로 인식한 것이 맞는지 피드백이 가능할까요?

 

  1. dom의 렌더링과 virtual dom의 렌더링은 서로 다른 시점이고 다른 책임을 가지고 있다.

  2. virtual dom은 dom렌더링을 낚아채서 빠르게 최적화하는게 아니고 dom렌더링은 브라우저가 항상 진행하는것이다.

  3. virtual dom은 빠른호출이 아니라 개발편의성 관점으로 보아야한다.

  4. 전체 트리에서 변경된부분을 찾기 때문에 하드코딩된 것과 비교해 호출속도에 있어서 오히려 오버헤드가 있을수있다.

     

  5. 기존의 상태가 변경될때, 필요한 요소를 일일히 찾아서 innerHTML로 업데이트하는 과정을 virtual dom을 통해 추상화하여 제공하는것이다.

  6. 필요한부분만 업데이트하는것이 중요한것은 17.1 innerHTML and its inefficiency에서 말씀하신대로 상태유실가능성 방지를 위한것이다.

     

     

javascript vanilla-js virtual-dom

回答 1

1

eunjae

안녕하세요.

Virtual DOM 에 대해서 아주 간략히 말씀을 드려보자면,

 

const elem = document.querySelector('....');

if (elem.classList.contains(...) {
  elem.classList.add(....)
}

이런 식으로 매번 element 에 직접 접근해서 업데이트를 하는 대신에

현재 페이지의 모든 elements 의 hierarchy 와 상태를 구조 그대로 메모리에 변수에 들고 있고,

업데이트 해야 할 때 그 변수들의 값을 확인해보고 실제로 어떤 element 을 찾아서 어떤 값을 업데이트 할 지 판단하는데 이용되는 하나의 레이어라고 보시면 됩니다.

 

잠깐 찾아보았는데, 이 두 영상이 VDOM 에 대해 적절하게 설명해주고 있는 것 같은데 도움이 되길 바랍니다!

 

https://www.youtube.com/watch?v=61R7Py0szPs

https://www.youtube.com/watch?v=rysTbzKOEO0

0

gggorock

답변 감사합니다.

답변해주신 내용에 따르면 제가 전반적인 맥락을 잘 따라오고 있는 것 같습니다.

그리고 참조해주신 영상을 보니, 속도 관점에서는, 실제 virtual dom이 dom조작해야할 리스트를 배치처리함으로써 dom이 업데이트해야할 '요소'를 최소화 하는것이 아니라, 'dom 렌더링 횟수'를 최소화 함으로써 속도를 높이는것이었네요.

참조해주신 영상이 구체적이면서도 시각적으로도 이해하기 쉬워서 그 외 다른 맥락을 이해하는데 많이 도움이 되었습니다.

3강 질문

0

18

1

74. 데이터 캐시 - 1 (이론) 강의 영상 누락

0

27

1

2강 nodejs 3단계 설명 질문

0

33

1

imagesLoaded에 관한 질문

0

19

2

useEffect와 lifecycle문의

0

26

2

프론트엔드 학습 수준 문의

0

37

2

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

48

2

최근 코테, 과제 테스트 트렌드

0

68

2

lucide react 아이콘 설치

0

46

2

17강 zustand store 서버에서 생성

1

36

1

문의관련 문의

0

44

2

깃헙 초대 관련

0

62

2

getInitialHTML을 꼭 빌드된 dist 디렉토리 내 파일에서 import하는 이유가 있나요??

1

149

2

번들러를 꼭 사용해야하나요?

3

621

1

filter test 마지막 문제 결과값이 이상합니다.

2

348

1

reactivity.js 를 proxy로 수정 후 오류

0

517

2

첫 강의 배포 & 번들러의 기초에 대한 제 이해가 맞는지 궁금합니다

1

522

1

클로저에 대해서 제가 아는 부분을 공유합니다!

1

655

1

yarn dev 안되요..

1

564

1

yearn create 1분정도

1

330

1

콘솔창 $0과 this에 대해

0

684

1

소스파일

0

673

2

백틱 치환 기능이 궁금합니다.

0

545

1

쇼핑물 api 입니다.

4

809

1