SlideShare a Scribd company logo
1 of 50
Virtual Dom
how to work virtual dom
Contents
Virtual DOM 이해하기
● Virtual DOM의 등장배경
● Virtual DOM의 concept
Virtual DOM 만들기
● Simple Virtual DOM FW을 만들어 보자
(virtual DOM의 internal 구현)
Virtual DOM 이해하기
Virtual DOM의 등장배경 - DOM
● DOM (Document Object Model)
그림 출처: https://auth0.com/blog/face-off-virtual-dom-vs-incremental-dom-vs-glimmer/
Virtual DOM의 등장배경 - DOM
● DOM의 Good Point
○ Cross-platform, cross-browser을 지원한다
○ Web page 구조를 쉽게 표현한다
○ 사용하기 쉽고, control 할 수 있는 API가 제공된다
● DOM의 Bad Point
○ DOM manipulation에서 성능의 문제가 있다(느리다)
Virtual DOM의 등장배경 - DOM
● DOM Manipulation
○ element
○ attribute
○ events
○ style
Virtual DOM의 등장배경 - DOM manipulation 느리다?
● 많은 문서에서 DOM manipulation이 ‘느리다’ 라고 한다
● 왜? ‘느리다’ 인지 잘 설명되어 있지 않다
Virtual DOM의 등장배경 - DOM manipulation 느린가?
● pure javascript가 원래 가장 빠른거 아닌가?
● pure javascript가 결국 최종적인 manipulation API 아닌가?
Virtual DOM의 등장배경 - DOM manipulation 느림의 진실
● 사실 DOM manipulation은 느리지 않음
● 그리고 결국 DOM조작을 하려면, DOM API를 써야함
Virtual DOM의 등장배경 - dom manipulation이 느리다?
● 그럼 왜 DOM Manipulation이 느리다고 할까?
그림:http://combiboilersleeds.com/images/confuse/confuse-0.jpg
Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일
● rendering engine basic flow
출처: http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일
webkit gecko
출처: https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/#The_rendering_engine
Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일
출처: http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
HTML source DOM Tree Render Tree
Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일
● reflow(layout)
○ render tree의 전체 또는 일부를 다시 확인하고, 노드의 크기를 계산해야 할때 발생
○ 적어도 최소한 한번은 발생(페이지가 처음 그려질때)
● repaint
○ 화면이 다시 그려져야(update) 하는 경우 발생.
● what triggers a reflow or a repaint?
○ Adding, removing, updating DOM node
○ Hiding DOM node
■ display:none (reflow and repaint)
■ visibility: hidden (repaint only)
○ moving, animating a DOM node on the page
○ Adding a stylesheet, tweaking style properties
○ user action such as resizing the window, changing the font size, scrolling...
Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일
출처: http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일
출처: http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일
● Browser는 reflow, repaint을 최대한 최적화 하여 동작.
● But, Browser의 최적화를 무력화 시키는 경우 존재
Virtual DOM의 등장배경 - dom manipulation이 느리다는 말의 의미
● DOM의 manipulation이 느리다? (X)
● DOM의 rendering calculation이 느리다! (o)
○ dom의 manipulation을 할 때 발생하는...
Virtual DOM의 concept - dom manipulation 횟수 최소화
● DOM의 manipulation을 빠르게 한다? (X)
● DOM의 manipulation에서 발생하는 rendering을 최소화 하자 (O)
=> DOM manipulation의 횟수를 최소화 하자
Virtual DOM의 concept - dom manipulation 횟수 최소화 예제
html & code JS manipulation (each) JS manipulation (ones)
Virtual DOM의 concept - dom manipulation 횟수 최소화 정리
● 여러분은, 이미 Virtual DOM의 concept을 사용했을 수 있습니다.
● 변경할 사항을 “가상의” 위치에서 처리하고, “실제 DOM”의 조작을 최소화!
넌 이미 알
고 있다.
Virtual DOM의 concept - What is virtual DOM?
● 가상의 DOM을 만들고 관리하는 것
● 가상의 DOM이란?
○ 무엇이든 될 수 있다~!!.
○ JSON, XML, Function, TEXT, annotation, etc ….
Virtual DOM의 concept - Virtual DOM JSON으로 이해해 보기
DOM JSON DOM
<ul class =”list”>
<li> item 1 </li>
<li> item 2 </li>
</ul>
{
type: ‘ul’,
props: {
‘class’: ‘list’
},
children: {
{ type: ‘li’, props: {}, children: [‘item 1’] },
{ type: ‘li’, props: {}, children: [‘item 2’] }
}
}
● JSON으로 DOM을 표현하기
Virtual DOM의 concept - Virtual DOM JSON으로 이해해 보기
DOM JSON DOM
<ul class =”list”>
<li> item 1 </li>
<li> item 2 </li>
</ul>
{
type: ‘ul’,
props: {
‘class’: ‘list’
},
children: {
{ type: ‘li’, props: {}, children: [‘item 1’] },
{ type: ‘li’, props: {}, children: [‘item 2’] },
{ type: ‘li’, props: {}, children: [‘item 3’] }
}
}
● JSON DOM을 update 하기
⇒ 실제 dom manipulation없이,
JSON에 대한 조작으로 DOM을
update
⇒ 여러 JSON으로
manipulation을 한 이후 최종적
으로만 dom manpulation
Virtual DOM의 문제점
● Virtual Table을 생성해야함
○ in-memory 사용의 증가
● DIFF의 필요성
● 개발자가 Virtual DOM의 개념을 이해 못하고 구현시, 큰 성능 향상이 없을 수 있음
Virtual DOM 만들기
Virtual DOM의 internal 구현을 한번 시도해보기
● 임의의 simple한 virtual dom을 구현합니다.
● How to write your own Virtual DOM의 글을 토대로 하였습니다.
Virtual DOM의 internal 구현을 한번 시도해보기 - Real DOM > JSON
DOM
JSON
JSON 표현
Virtual DOM의 internal 구현을 한번 시도해보기 - JSON > Function
JSON 표현
Function
사용
Virtual DOM의 internal 구현을 한번 시도해보기 - JSX 표현
JSX 표현
JSX가
Transpiled되면
Virtual DOM의 internal 구현을 한번 시도해보기 - JSX 표현
참고: https://jsfiddle.net/deathmood/5qyLubt4/?utm_source=website&utm_medium=embed&utm_campaign=5qyLubt4
Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM
참고: https://jsfiddle.net/deathmood/cL0Lc7au/?utm_source=website&utm_medium=embed&utm_campaign=cL0Lc7au
Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM update
● 다음 사항들을 고려해야 한다.
○ add
○ remove
○ replace
○ compare child node
Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM update
● diff (change)을 판단하는 함수
Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM update
● update 함수
Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM update
● update 함수
children check
Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM update
● update 함수 전체 버전
참고: https://jsfiddle.net/deathmood/0htedLra/?utm_source=website&utm_medium=embed&utm_campaign=0htedLra
Virtual DOM의 internal 구현을 한번 시도해보기 - 남은 내용들
● Property 처리
● Event 처리
● component로 만들기
Virtual DOM 정리
● 그래서 뭐?
○ dom manipulation을 최소화 하는 방법을 사용하는게 좋다 (꼭 virtual dom이 아니어도…)
○ virtual dom의 원리를 알고 쓰는게 좋다 (web 개발자라면 특히나…)
○ 이 자료를 보고, virtual dom에 대한 기본 개념 이해가 높아졌으면 좋겠다...
감사합니다
Q & A
Reference
● youtube
○ 만화 형태의 간단한 설명 - https://www.youtube.com/watch?v=BYbgopx44vo
○ 바벨에서 세미나 발표한 설명, data-binding에 초점, 핵심은 비슷, - https://www.youtube.com/watch?v=BYbgopx44vo
○ 간단하고 핵심적인 5분 이하 동영상 - https://www.youtube.com/watch?v=OoS5AK6qz1Q
○ Diff 알고리즘 및 browser DOM을 최대한 조금 건드린다는 설명 - https://www.youtube.com/watch?v=mLMfx8BEt8g
● ppt
○ why and how to use virtual dom - https://www.slideshare.net/DaiweiLu/why-and-how-to-use-virtual-dom
○ reactjs - https://facebook.github.io/react/blog/2014/02/15/community-roundup-16.html
● articles
○ virtual dom vs incremental dom - https://auth0.com/blog/face-off-virtual-dom-vs-incremental-dom-vs-glimmer/
○ data의 변화를 감지하고, dom을 변경하는 fw 소개 - http://teropa.info/blog/2015/03/02/change-and-its-detection-in-javascript-frameworks.html
○ dom 이 느린 이유 - http://stackoverflow.com/questions/6817093/but-whys-the-browser-dom-still-so-slow-after-10-years-of-effort
○ browser에서 rendering 설명 (좋은자료) - https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/
○ browser에서 rendering & paint 관련 설명 (좋은 자료) - http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
○ virtual dom와 dom의 차이 - http://reactkungfu.com/2015/10/the-difference-between-virtual-dom-and-dom/
○ virtual dom 이란? - https://jbi.sh/what-is-virtual-dom/
○ virtual dom 짧은 설명, dom의 문제 - https://www.codecademy.com/articles/react-virtual-dom
○ dom manifulation의 문제 (좋은자료) - https://www.accelebrate.com/blog/the-real-benefits-of-the-virtual-dom-in-react-js/
○ virtual dom 벤치마크 - https://vdom-benchmark.github.io/vdom-benchmark/
○ jsx 설명 - https://www.fullstackreact.com/p/jsx-and-the-virtual-dom/
○ server side, virtual dom - https://www.afas.nl/blog/virtual-dom-how-inefficiency-can-lead-to-better-performance
○ how to write your own virtual DOM - https://medium.com/@deathmood/how-to-write-your-own-virtual-dom-ee74acc13060
○ Inner workings of virtual DOM - https://medium.com/@rajaraodv/the-inner-workings-of-virtual-dom-666ee7ad47cf
Appendix
Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS에서의 concept
Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS에서의 concept
Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS에서의 concept
Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS에서의 concept
"use strict"
class Test extends React.Component {
updateDom(cnt) {
this.setState({
cnt: cnt
});
}
...
render() {
return (
<div>
<div>5 dom change test</div>
<button onClick={this.test}>test start</button>
<button onClick={this.simpleFor}>simpleFor start</button>
<div id="dom1">{this.state.cnt + 1}</div>
<div id="dom2">{this.state.cnt + 2}</div>
<div id="dom3">{this.state.cnt + 3}</div>
<div id="dom4">{this.state.cnt + 4}</div>
<div id="dom5">{this.state.cnt + 5}</div>
</div>
);
}
}
ReactDOM.render(
<Test />,
document.getElementById('root')
);
참고: https://jsfiddle.net/gseok/4jo353Lq/
The inner working of virtual DOM
참고: https://medium.com/@rajaraodv/the-inner-workings-of-virtual-dom-666ee7ad47cf
React JSX
● XML 처럼 element을 작성 (View)
● JSX에 의해 React.createElement로 치환
● React.createElement는 Virtual DOM, 일종의 Object을 리턴함
React JSX
● <h1> hello, world</h1>은, React.createElement는 Virtual DOM, 일종의 Object을 리턴함
● ReactDOM.render 함수는, 실제 DOM으로 rendering 하는 역할
○ 실제 code를 분석해보면, createElement을 호출하는 부분을 발견할 수 있다.
○ https://github.com/facebook/react/blob/master/src/renderers/dom/fiber/ReactDOMFiberComponent.js
End
gseok.seo@gmail.com

More Related Content

What's hot

웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기Kim Hunmin
 
MVPs are too expensive - How wasteless validation leads to better insights
MVPs are too expensive - How wasteless validation leads to better insightsMVPs are too expensive - How wasteless validation leads to better insights
MVPs are too expensive - How wasteless validation leads to better insightsTim Herbig
 
행동 기반 게임오브젝트
행동 기반 게임오브젝트행동 기반 게임오브젝트
행동 기반 게임오브젝트kgun86
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?흥배 최
 
1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들Jinsub Jung
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정강 민우
 
결제를 구현하고 싶은 개발팀을 위한 안내서
결제를 구현하고 싶은 개발팀을 위한 안내서결제를 구현하고 싶은 개발팀을 위한 안내서
결제를 구현하고 싶은 개발팀을 위한 안내서수보 김
 
WordPress for Education PPT
WordPress for Education PPTWordPress for Education PPT
WordPress for Education PPTjekkilekki
 
How to make Headless Commerce Strategy.
How to make Headless Commerce Strategy.How to make Headless Commerce Strategy.
How to make Headless Commerce Strategy.Aureate Labs
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
모바일 게임기획 따라하며 배우기
모바일 게임기획 따라하며 배우기모바일 게임기획 따라하며 배우기
모바일 게임기획 따라하며 배우기Sunnyrider
 
게임제작개론 8
게임제작개론 8게임제작개론 8
게임제작개론 8Seokmin No
 
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
게임회사 실무용어 완전정복! 쿡앱스 용어정리집 게임회사 실무용어 완전정복! 쿡앱스 용어정리집
게임회사 실무용어 완전정복! 쿡앱스 용어정리집 CookApps
 
Better web apps with React and Redux
Better web apps with React and ReduxBetter web apps with React and Redux
Better web apps with React and ReduxAli Sa'o
 
17 Copywriting Do's and Don'ts: How To Write Persuasive Content
17 Copywriting Do's and Don'ts: How To Write Persuasive Content17 Copywriting Do's and Don'ts: How To Write Persuasive Content
17 Copywriting Do's and Don'ts: How To Write Persuasive ContentHenneke Duistermaat
 
유니티3D에서 2D 이미지 다루기
유니티3D에서 2D 이미지 다루기유니티3D에서 2D 이미지 다루기
유니티3D에서 2D 이미지 다루기Jungsoo Park
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architectureJongwon Kim
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조Hyunjik Bae
 

What's hot (20)

웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기
 
MVPs are too expensive - How wasteless validation leads to better insights
MVPs are too expensive - How wasteless validation leads to better insightsMVPs are too expensive - How wasteless validation leads to better insights
MVPs are too expensive - How wasteless validation leads to better insights
 
행동 기반 게임오브젝트
행동 기반 게임오브젝트행동 기반 게임오브젝트
행동 기반 게임오브젝트
 
What is Game Server ?
What is Game Server ?What is Game Server ?
What is Game Server ?
 
1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들1인개발자가되기전알아야할것들
1인개발자가되기전알아야할것들
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
 
결제를 구현하고 싶은 개발팀을 위한 안내서
결제를 구현하고 싶은 개발팀을 위한 안내서결제를 구현하고 싶은 개발팀을 위한 안내서
결제를 구현하고 싶은 개발팀을 위한 안내서
 
WordPress for Education PPT
WordPress for Education PPTWordPress for Education PPT
WordPress for Education PPT
 
How to make Headless Commerce Strategy.
How to make Headless Commerce Strategy.How to make Headless Commerce Strategy.
How to make Headless Commerce Strategy.
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
모바일 게임기획 따라하며 배우기
모바일 게임기획 따라하며 배우기모바일 게임기획 따라하며 배우기
모바일 게임기획 따라하며 배우기
 
게임제작개론 8
게임제작개론 8게임제작개론 8
게임제작개론 8
 
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
게임회사 실무용어 완전정복! 쿡앱스 용어정리집 게임회사 실무용어 완전정복! 쿡앱스 용어정리집
게임회사 실무용어 완전정복! 쿡앱스 용어정리집
 
Better web apps with React and Redux
Better web apps with React and ReduxBetter web apps with React and Redux
Better web apps with React and Redux
 
17 Copywriting Do's and Don'ts: How To Write Persuasive Content
17 Copywriting Do's and Don'ts: How To Write Persuasive Content17 Copywriting Do's and Don'ts: How To Write Persuasive Content
17 Copywriting Do's and Don'ts: How To Write Persuasive Content
 
유니티3D에서 2D 이미지 다루기
유니티3D에서 2D 이미지 다루기유니티3D에서 2D 이미지 다루기
유니티3D에서 2D 이미지 다루기
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 

Similar to Virtual dom

코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf이정환
 
이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf이정환
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
01 introduce-react-js
01 introduce-react-js01 introduce-react-js
01 introduce-react-jsJay Lee
 
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...Sang Seok Lim
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망Sang Seok Lim
 
[D2 오픈세미나]1.무한스크롤성능개선
[D2 오픈세미나]1.무한스크롤성능개선[D2 오픈세미나]1.무한스크롤성능개선
[D2 오픈세미나]1.무한스크롤성능개선NAVER D2
 
Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Paprikhan
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220Seomgi Han
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017devCAT Studio, NEXON
 
웹 브라우저는 어떻게 동작하나? (2)
웹 브라우저는 어떻게 동작하나? (2)웹 브라우저는 어떻게 동작하나? (2)
웹 브라우저는 어떻게 동작하나? (2)Joone Hur
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기Minyoung Jeong
 
꾸글 월간노하우 7월 그랑노마드입니다.
꾸글 월간노하우 7월 그랑노마드입니다.꾸글 월간노하우 7월 그랑노마드입니다.
꾸글 월간노하우 7월 그랑노마드입니다.종원 이
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기Chang W. Doh
 
웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리Young-Ho Cha
 
2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주범재 이
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안Jeongsang Baek
 

Similar to Virtual dom (20)

코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf
 
이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
01 introduce-react-js
01 introduce-react-js01 introduce-react-js
01 introduce-react-js
 
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
HTML5 관점에서 2015년 웹 앱 개발 동향과 사례 및 2016년 발전 방향 저...
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
 
[D2 오픈세미나]1.무한스크롤성능개선
[D2 오픈세미나]1.무한스크롤성능개선[D2 오픈세미나]1.무한스크롤성능개선
[D2 오픈세미나]1.무한스크롤성능개선
 
Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Node.js + Websocket 삽질기
Node.js + Websocket 삽질기
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
 
웹 브라우저는 어떻게 동작하나? (2)
웹 브라우저는 어떻게 동작하나? (2)웹 브라우저는 어떻게 동작하나? (2)
웹 브라우저는 어떻게 동작하나? (2)
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기
 
Dynamodb 삽질기
Dynamodb 삽질기Dynamodb 삽질기
Dynamodb 삽질기
 
Modern android
Modern androidModern android
Modern android
 
꾸글 월간노하우 7월 그랑노마드입니다.
꾸글 월간노하우 7월 그랑노마드입니다.꾸글 월간노하우 7월 그랑노마드입니다.
꾸글 월간노하우 7월 그랑노마드입니다.
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리
 
Place site Design
Place site DesignPlace site Design
Place site Design
 
2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 

Recently uploaded

데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 

Recently uploaded (8)

데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 

Virtual dom

  • 1. Virtual Dom how to work virtual dom
  • 2. Contents Virtual DOM 이해하기 ● Virtual DOM의 등장배경 ● Virtual DOM의 concept Virtual DOM 만들기 ● Simple Virtual DOM FW을 만들어 보자 (virtual DOM의 internal 구현)
  • 4. Virtual DOM의 등장배경 - DOM ● DOM (Document Object Model) 그림 출처: https://auth0.com/blog/face-off-virtual-dom-vs-incremental-dom-vs-glimmer/
  • 5. Virtual DOM의 등장배경 - DOM ● DOM의 Good Point ○ Cross-platform, cross-browser을 지원한다 ○ Web page 구조를 쉽게 표현한다 ○ 사용하기 쉽고, control 할 수 있는 API가 제공된다 ● DOM의 Bad Point ○ DOM manipulation에서 성능의 문제가 있다(느리다)
  • 6. Virtual DOM의 등장배경 - DOM ● DOM Manipulation ○ element ○ attribute ○ events ○ style
  • 7. Virtual DOM의 등장배경 - DOM manipulation 느리다? ● 많은 문서에서 DOM manipulation이 ‘느리다’ 라고 한다 ● 왜? ‘느리다’ 인지 잘 설명되어 있지 않다
  • 8. Virtual DOM의 등장배경 - DOM manipulation 느린가? ● pure javascript가 원래 가장 빠른거 아닌가? ● pure javascript가 결국 최종적인 manipulation API 아닌가?
  • 9. Virtual DOM의 등장배경 - DOM manipulation 느림의 진실 ● 사실 DOM manipulation은 느리지 않음 ● 그리고 결국 DOM조작을 하려면, DOM API를 써야함
  • 10. Virtual DOM의 등장배경 - dom manipulation이 느리다? ● 그럼 왜 DOM Manipulation이 느리다고 할까? 그림:http://combiboilersleeds.com/images/confuse/confuse-0.jpg
  • 11. Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일 ● rendering engine basic flow 출처: http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
  • 12. Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일 webkit gecko 출처: https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/#The_rendering_engine
  • 13. Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일 출처: http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/ HTML source DOM Tree Render Tree
  • 14. Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일 ● reflow(layout) ○ render tree의 전체 또는 일부를 다시 확인하고, 노드의 크기를 계산해야 할때 발생 ○ 적어도 최소한 한번은 발생(페이지가 처음 그려질때) ● repaint ○ 화면이 다시 그려져야(update) 하는 경우 발생. ● what triggers a reflow or a repaint? ○ Adding, removing, updating DOM node ○ Hiding DOM node ■ display:none (reflow and repaint) ■ visibility: hidden (repaint only) ○ moving, animating a DOM node on the page ○ Adding a stylesheet, tweaking style properties ○ user action such as resizing the window, changing the font size, scrolling...
  • 15. Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일 출처: http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
  • 16. Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일 출처: http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/
  • 17. Virtual DOM의 등장배경 - dom manipulation을 하면 Browser에서 일어나는 일 ● Browser는 reflow, repaint을 최대한 최적화 하여 동작. ● But, Browser의 최적화를 무력화 시키는 경우 존재
  • 18. Virtual DOM의 등장배경 - dom manipulation이 느리다는 말의 의미 ● DOM의 manipulation이 느리다? (X) ● DOM의 rendering calculation이 느리다! (o) ○ dom의 manipulation을 할 때 발생하는...
  • 19. Virtual DOM의 concept - dom manipulation 횟수 최소화 ● DOM의 manipulation을 빠르게 한다? (X) ● DOM의 manipulation에서 발생하는 rendering을 최소화 하자 (O) => DOM manipulation의 횟수를 최소화 하자
  • 20. Virtual DOM의 concept - dom manipulation 횟수 최소화 예제 html & code JS manipulation (each) JS manipulation (ones)
  • 21. Virtual DOM의 concept - dom manipulation 횟수 최소화 정리 ● 여러분은, 이미 Virtual DOM의 concept을 사용했을 수 있습니다. ● 변경할 사항을 “가상의” 위치에서 처리하고, “실제 DOM”의 조작을 최소화! 넌 이미 알 고 있다.
  • 22. Virtual DOM의 concept - What is virtual DOM? ● 가상의 DOM을 만들고 관리하는 것 ● 가상의 DOM이란? ○ 무엇이든 될 수 있다~!!. ○ JSON, XML, Function, TEXT, annotation, etc ….
  • 23. Virtual DOM의 concept - Virtual DOM JSON으로 이해해 보기 DOM JSON DOM <ul class =”list”> <li> item 1 </li> <li> item 2 </li> </ul> { type: ‘ul’, props: { ‘class’: ‘list’ }, children: { { type: ‘li’, props: {}, children: [‘item 1’] }, { type: ‘li’, props: {}, children: [‘item 2’] } } } ● JSON으로 DOM을 표현하기
  • 24. Virtual DOM의 concept - Virtual DOM JSON으로 이해해 보기 DOM JSON DOM <ul class =”list”> <li> item 1 </li> <li> item 2 </li> </ul> { type: ‘ul’, props: { ‘class’: ‘list’ }, children: { { type: ‘li’, props: {}, children: [‘item 1’] }, { type: ‘li’, props: {}, children: [‘item 2’] }, { type: ‘li’, props: {}, children: [‘item 3’] } } } ● JSON DOM을 update 하기 ⇒ 실제 dom manipulation없이, JSON에 대한 조작으로 DOM을 update ⇒ 여러 JSON으로 manipulation을 한 이후 최종적 으로만 dom manpulation
  • 25. Virtual DOM의 문제점 ● Virtual Table을 생성해야함 ○ in-memory 사용의 증가 ● DIFF의 필요성 ● 개발자가 Virtual DOM의 개념을 이해 못하고 구현시, 큰 성능 향상이 없을 수 있음
  • 27. Virtual DOM의 internal 구현을 한번 시도해보기 ● 임의의 simple한 virtual dom을 구현합니다. ● How to write your own Virtual DOM의 글을 토대로 하였습니다.
  • 28. Virtual DOM의 internal 구현을 한번 시도해보기 - Real DOM > JSON DOM JSON JSON 표현
  • 29. Virtual DOM의 internal 구현을 한번 시도해보기 - JSON > Function JSON 표현 Function 사용
  • 30. Virtual DOM의 internal 구현을 한번 시도해보기 - JSX 표현 JSX 표현 JSX가 Transpiled되면
  • 31. Virtual DOM의 internal 구현을 한번 시도해보기 - JSX 표현 참고: https://jsfiddle.net/deathmood/5qyLubt4/?utm_source=website&utm_medium=embed&utm_campaign=5qyLubt4
  • 32. Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM 참고: https://jsfiddle.net/deathmood/cL0Lc7au/?utm_source=website&utm_medium=embed&utm_campaign=cL0Lc7au
  • 33. Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM update ● 다음 사항들을 고려해야 한다. ○ add ○ remove ○ replace ○ compare child node
  • 34. Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM update ● diff (change)을 판단하는 함수
  • 35. Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM update ● update 함수
  • 36. Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM update ● update 함수 children check
  • 37. Virtual DOM의 internal 구현을 한번 시도해보기 - VirtualDOM to Real DOM update ● update 함수 전체 버전 참고: https://jsfiddle.net/deathmood/0htedLra/?utm_source=website&utm_medium=embed&utm_campaign=0htedLra
  • 38. Virtual DOM의 internal 구현을 한번 시도해보기 - 남은 내용들 ● Property 처리 ● Event 처리 ● component로 만들기
  • 39. Virtual DOM 정리 ● 그래서 뭐? ○ dom manipulation을 최소화 하는 방법을 사용하는게 좋다 (꼭 virtual dom이 아니어도…) ○ virtual dom의 원리를 알고 쓰는게 좋다 (web 개발자라면 특히나…) ○ 이 자료를 보고, virtual dom에 대한 기본 개념 이해가 높아졌으면 좋겠다...
  • 41. Reference ● youtube ○ 만화 형태의 간단한 설명 - https://www.youtube.com/watch?v=BYbgopx44vo ○ 바벨에서 세미나 발표한 설명, data-binding에 초점, 핵심은 비슷, - https://www.youtube.com/watch?v=BYbgopx44vo ○ 간단하고 핵심적인 5분 이하 동영상 - https://www.youtube.com/watch?v=OoS5AK6qz1Q ○ Diff 알고리즘 및 browser DOM을 최대한 조금 건드린다는 설명 - https://www.youtube.com/watch?v=mLMfx8BEt8g ● ppt ○ why and how to use virtual dom - https://www.slideshare.net/DaiweiLu/why-and-how-to-use-virtual-dom ○ reactjs - https://facebook.github.io/react/blog/2014/02/15/community-roundup-16.html ● articles ○ virtual dom vs incremental dom - https://auth0.com/blog/face-off-virtual-dom-vs-incremental-dom-vs-glimmer/ ○ data의 변화를 감지하고, dom을 변경하는 fw 소개 - http://teropa.info/blog/2015/03/02/change-and-its-detection-in-javascript-frameworks.html ○ dom 이 느린 이유 - http://stackoverflow.com/questions/6817093/but-whys-the-browser-dom-still-so-slow-after-10-years-of-effort ○ browser에서 rendering 설명 (좋은자료) - https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/ ○ browser에서 rendering & paint 관련 설명 (좋은 자료) - http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/ ○ virtual dom와 dom의 차이 - http://reactkungfu.com/2015/10/the-difference-between-virtual-dom-and-dom/ ○ virtual dom 이란? - https://jbi.sh/what-is-virtual-dom/ ○ virtual dom 짧은 설명, dom의 문제 - https://www.codecademy.com/articles/react-virtual-dom ○ dom manifulation의 문제 (좋은자료) - https://www.accelebrate.com/blog/the-real-benefits-of-the-virtual-dom-in-react-js/ ○ virtual dom 벤치마크 - https://vdom-benchmark.github.io/vdom-benchmark/ ○ jsx 설명 - https://www.fullstackreact.com/p/jsx-and-the-virtual-dom/ ○ server side, virtual dom - https://www.afas.nl/blog/virtual-dom-how-inefficiency-can-lead-to-better-performance ○ how to write your own virtual DOM - https://medium.com/@deathmood/how-to-write-your-own-virtual-dom-ee74acc13060 ○ Inner workings of virtual DOM - https://medium.com/@rajaraodv/the-inner-workings-of-virtual-dom-666ee7ad47cf
  • 43. Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS에서의 concept
  • 44. Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS에서의 concept
  • 45. Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS에서의 concept
  • 46. Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS에서의 concept "use strict" class Test extends React.Component { updateDom(cnt) { this.setState({ cnt: cnt }); } ... render() { return ( <div> <div>5 dom change test</div> <button onClick={this.test}>test start</button> <button onClick={this.simpleFor}>simpleFor start</button> <div id="dom1">{this.state.cnt + 1}</div> <div id="dom2">{this.state.cnt + 2}</div> <div id="dom3">{this.state.cnt + 3}</div> <div id="dom4">{this.state.cnt + 4}</div> <div id="dom5">{this.state.cnt + 5}</div> </div> ); } } ReactDOM.render( <Test />, document.getElementById('root') ); 참고: https://jsfiddle.net/gseok/4jo353Lq/
  • 47. The inner working of virtual DOM 참고: https://medium.com/@rajaraodv/the-inner-workings-of-virtual-dom-666ee7ad47cf
  • 48. React JSX ● XML 처럼 element을 작성 (View) ● JSX에 의해 React.createElement로 치환 ● React.createElement는 Virtual DOM, 일종의 Object을 리턴함
  • 49. React JSX ● <h1> hello, world</h1>은, React.createElement는 Virtual DOM, 일종의 Object을 리턴함 ● ReactDOM.render 함수는, 실제 DOM으로 rendering 하는 역할 ○ 실제 code를 분석해보면, createElement을 호출하는 부분을 발견할 수 있다. ○ https://github.com/facebook/react/blob/master/src/renderers/dom/fiber/ReactDOMFiberComponent.js

Editor's Notes

  1. http://combiboilersleeds.com/images/confuse/confuse-0.jpg
  2. HTML source code을 파싱해서, DOM tree을 생성한다. CSS code을 파싱해서, style struct을 생성한다. css 파일을 먼저 파싱 최종적으로 code내의 style태그 파싱 dom tree 와 style structure을 사용해서 Render tree을 만든다. Render tree을 이용해서, layout(reflow)나 painting을 한다. 랜더링 엔진 간단 설명 (Rendering engines) Different browsers use different rendering engines: Internet Explorer uses Trident, Firefox uses Gecko, Safari uses WebKit. Chrome and Opera (from version 15) use Blink, a fork of WebKit. WebKit is an open source rendering engine which started as an engine for the Linux platform and was modified by Apple to support Mac and Windows. See webkit.org for more details. Javasceript Enging → V8
  3. HTML source code을 파싱해서, DOM tree을 생성한다. CSS code을 파싱해서, style struct을 생성한다. css 파일을 먼저 파싱 최종적으로 code내의 style태그 파싱 dom tree 와 style structure을 사용해서 Render tree을 만든다. Render tree을 이용해서, layout(reflow)나 painting을 한다. 랜더링 엔진 간단 설명 (Rendering engines) Different browsers use different rendering engines: Internet Explorer uses Trident, Firefox uses Gecko, Safari uses WebKit. Chrome and Opera (from version 15) use Blink, a fork of WebKit. WebKit is an open source rendering engine which started as an engine for the Linux platform and was modified by Apple to support Mac and Windows. See webkit.org for more details. Javasceript Enging → V8
  4. 기본적으로, 처음 paint될때는 paint와 layout이 모두 발생함
  5. 기본적으로 Browser역시, reflow, repaint의 비용 문제를 알고 있다. Browser는 내부적으로 큐와 같은 자료 구조를 이용해서 매번 reflow, repaint을 하지 않고, 일정 시점에 한번 reflow, repaint을 하려고 노력한다. 하지만, Browser에서 큐와 같은 자료구조를 초기화 하고, 항상 reflow, repaint을 해야 하는 경우도 있다. style정보를 항상 최신 값으로 주어야 하기 때문.
  6. DOM manipulation is the heart of the modern, interactive web. Unfortunately, it is also a lot slower than most JavaScript operations. This slowness is made worse by the fact that most JavaScript frameworks update the DOM much more than they have to.
  7. 14. Virtual dom의 concept을 이해하기 - 핵심 아이디어 ~ 해법은 언제나 근원으로 부터... - 핵심 concept은...(아이디어는..!!) -- dom manipulation을 빠르게 한다? (X) - 불가능 -- dom manipulation에서 발생하는 browser의 rendering을 최소화 하자. (O) - 가능 - 그럼 어떻게??
  8. 예제: https://jsfiddle.net/gseok/4jo353Lq/ 15. Virtual dom의 concept을 이해하기 - 핵심 아이디어 ~ 해법은 언제나 근원으로 부터.. - dom manipulation의 횟수가 최소화 되면 됨!! -- (부제..)이미 여러분은 virtrual dom의 concept을 사용했을 수도 있다! 16. Virtual dom의 concept을 이해하기 - dom의 manipulation횟수 최소화 예제 - 5개의 <item> 을 update 하는 경우로 살펴보기. (실제예제사용) - dom의 manipulation이 많이 발생하는 방법 --> 각각의 item을 일일이 update 17. Virtual dom의 concept을 이해하기 - dom의 manipulation횟수 최소화 예제 - 5개의 <item> 을 update 하는 경우. (실제예제 사용 - 2배 빨라진거 확인 가능) - dom의 manipulation이 적게 발생하는 방법 --> update되는 5개 item을 in-memory상에서 dom을 만들고, remove, append한번만. 18. Virtual dom의 concept을 이해하기 - dom의 manipulation횟수 최소화 정리 - 이미 여러분은 virtrual dom의 concept을 사용했을 수도 있다! -- 대규모 dom조작시 화면의 깜빡거림등이 발생시.. 미리 만들고 교체!! - 핵심..! -- 변경할 사항을 "가상의" 위치에서 처리하고, "실제dom"의 조작은 최소화!!!
  9. 18. Virtual dom의 concept을 이해하기 - dom의 manipulation횟수 최소화 정리 - 이미 여러분은 virtrual dom의 concept을 사용했을 수도 있다! -- 대규모 dom조작시 화면의 깜빡거림등이 발생시.. 미리 만들고 교체!! - 핵심..! -- 변경할 사항을 "가상의" 위치에서 처리하고, "실제dom"의 조작은 최소화!!!
  10. 19. Virtual dom의 concept을 이해하기. - What is virtual DOM? - 가상의 위치란? -- 무었이든 될 수 있다~!!! -- JSON -- function -- "TEXT" -- anotation? .....
  11. 20. Virtual dom의 concept을 이해하기. - Virtual DOM - JSON으로 이해해 보기 - JSON으로 DOM Tree을 표현
  12. 20. Virtual dom의 concept을 이해하기. - Virtual DOM - JSON으로 이해해 보기 - JSON으로 DOM Tree을 표현
  13. 25. Virtual dom의 문제점 - Virtual Table을 생성해야함. (in-memory사용의 증가) - DIFF의 필요성 (이부분이 핵심 로직이 됨) - 개발자가 virtual dom의 개념을 잘 이해 못하고 구현시, 큰 성능 향상이 없을 수 있음. - Virtual Table끼리의 비교문제 --> Incremenal DOM (google)
  14. 26. virtual dom의 internal 구현을 한번 시도해보기. - 실제 Virtual dom의 구현체는 여러개임(React, 기타등등...) - 코드가 매우 길고 복잡 (참고자료에 preact 흐름도) - 여기서는 임의의 simple버전 구현을 소개 - How to write your own Virtual DOM의 글을 토대로함(링크주소) https://github.com/Matt-Esch/virtual-dom/wiki
  15. 27. virtual dom의 internal 구현을 한번 시도해보기. - DOM Tree를 실제 표현해보기 (real DOM > JSON) - real DOM > JSON
  16. 28. virtual dom의 internal 구현을 한번 시도해보기. - DOM Tree를 실제 표현해보기 (JSON > function) - JSON > function화 We represent DOM text nodes with plain JS strings But writing big trees in such way is quite difficult. So let’s write a helper function, so it will be easier for us to understand structure: 사용이 불편 JSX로
  17. JSX: Javascript + XML, Javascript 확장 문법 JSX: https://babeljs.io/docs/plugins/transform-react-jsx/
  18. JSX: Javascript + XML, Javascript 확장 문법 JSX: https://babeljs.io/docs/plugins/transform-react-jsx/
  19. 30. virtual dom의 internal 구현을 한번 시도해보기. - VirtualDOM을 실제 DOM으로 만드는 함수 만들기
  20. 31. virtual dom의 internal 구현을 한번 시도해보기. - VirtualDOM 변경을 실제 dom에 update하는 함수 만들기 - add - remove - replace - 비교할 이전 virtualDOM이 없는 경우 - 비교할 새로운 virtualDOM이 없는 경우 - node의 자식 노드 처리도 필요
  21. 32. virtual dom의 internal 구현을 한번 시도해보기. - VirtualDOM 변경을 확인하는 함수 만들기 - check change
  22. 33. virtual dom의 internal 구현을 한번 시도해보기. - VirtualDOM 변경을 확인하고 update하는 함수로 통합(update)
  23. 33. virtual dom의 internal 구현을 한번 시도해보기. - VirtualDOM 변경을 확인하고 update하는 함수로 통합(update)
  24. 34. virtual dom의 internal 구현 - 테스트 !! - 전체 코드를 합쳐서! - JSFiddle 링크(삽입 or 링크를 이용하게 함)
  25. 35. virtual dom의 internal 구현 - 테스트 !! - 남은 내용들. - property 처리 - event 처리 - component로 만들기 등..
  26. 35. virtual dom의 internal 구현 - 테스트 !! - 남은 내용들. - property 처리 - event 처리 - component로 만들기 등..
  27. 35. virtual dom의 internal 구현 - 테스트 !! - 남은 내용들. - property 처리 - event 처리 - component로 만들기 등..
  28. 24. Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS에서의 concept - reactJS에서 사용한 virtual DOM그림 (big picture 넣기)
  29. 24. Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS에서의 concept - reactJS에서 사용한 virtual DOM그림 (big picture 넣기)
  30. 24. Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS에서의 concept - reactJS에서 사용한 virtual DOM그림 (big picture 넣기)
  31. 참고: https://jsfiddle.net/gseok/4jo353Lq/ 25. Virtual dom의 concept을 이해하기. - Virtual DOM - ReactJS로 구현해본 예제 - 5개의 <item> 을 update 하는 경우. (실제예제 사용) - 앞쪽에서 설명한 실제 예제 2가지랑 비교해주기 (React의 virtual dom 사용시 빨라짐!)