What is virtual dom?
⟎䟝DOMהכծDOMך圓鸡JSךؔـآؙؑزדⱄ植׃ծ
DOMך刿倜ח䗳銲ז䞔㜠ؔـآؙؑزך䊴ⴓד邌植ֿׅהדծ
湫䱸DOMח鍗׆חծ
DOMך刿倜ח䗳銲זؔلٖ٦ءّٝ䬄⳿ׅך圓鸡
ـٓؐؠךDOMؔلٖ٦ءָّٝ鹼ְծ罋周ׁկ
Slide 5
Slide 5 text
What is virtual dom?
DOM node
DOM node DOM node
DOM node DOM node DOM node
Virtual Node
Virtual Node Virtual Node
Virtual Node Virtual Node Virtual Node
DOM tree
VDom Tree
Slide 6
Slide 6 text
div
span div
text span p
What is virtual dom?
div
span div
text span p
Removed
VDom tree A
VDom Tree B
嫰鯰
Slide 7
Slide 7 text
DOM node
DOM node DOM node
DOM node DOM node DOM node
div
span div
text span p
Removed
What is virtual dom?
VDom tree
Dom Tree
ؔلٖ٦ءّٝ黝欽
Remove OP
Slide 8
Slide 8 text
Virtual DOM Implementation
⟎䟝DOMכ㛇劤涸ח加圓鸡זךדծ加圓鸡嫰鯰ך،ٕ؞ٔؤي⢪ִלծ
넝鸞ח嫰鯰ծPatchָדֹכ׆
Tree Edit Distanceשְ䠬ׄד㹋鄲կ
׃גծvdom-benchmarkדكٝث
https://vdom-benchmark.github.io/vdom-benchmark/
Slide 9
Slide 9 text
Virtual DOM Implementation
Fuel 157628
React 187506
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“5” li key=“4” li key=“3” li key=“2” li key=“1”
ؙ
ؙٗ
ٗأ
أ
Unmatch
Match
treeALeftIndex = 0
treeBLeftIndex = 0
treeARightIndex = 4
treeBRightIndex = 4
Slide 18
Slide 18 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“5” li key=“4” li key=“3” li key=“2” li key=“1”
ؙ
ؙٗ
ٗأ
أ
Unmatch
Match
treeALeftIndex = 0 treeARightIndex = 3
treeBLeftIndex = 1 treeBRightIndex = 4
Slide 19
Slide 19 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“5” li key=“4” li key=“3” li key=“2” li key=“1”
ؙ
ؙٗ
ٗأ
أ
Unmatch
Match
treeALeftIndex = 0 treeARightIndex = 2
treeBLeftIndex = 2 treeBRightIndex = 4
Slide 20
Slide 20 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“5” li key=“4” li key=“3” li key=“2” li key=“1”
ؙ
ؙٗ
ٗأ
أ
Unmatch
Match
treeALeftIndex = 0 treeARightIndex = 2
treeBLeftIndex = 2 treeBRightIndex = 4
Slide 21
Slide 21 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“5” li key=“4” li key=“3” li key=“2” li key=“1”
ؙ
ؙٗ
ٗأ
أ
Match
treeALeftIndex = 0 treeARightIndex = 2
treeBLeftIndex = 2 treeBRightIndex = 4
Slide 22
Slide 22 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“3” li key=“1” li key=“2” li key=“4” li key=“5”
ٔ
ٔ،
،
Unmatch
Unmatch
treeALeftIndex = 0
treeBLeftIndex = 0
treeARightIndex = 4
treeBRightIndex = 4
Match
Slide 23
Slide 23 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“3” li key=“1” li key=“2” li key=“4” li key=“5”
ٔ
ٔ،
،
Unmatch
Unmatch
treeALeftIndex = 0
treeBLeftIndex = 0
treeARightIndex = 3
treeBRightIndex = 3
Match
Slide 24
Slide 24 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“3” li key=“1” li key=“2” li key=“4” li key=“5”
ٔ
ٔ،
،
Unmatch
Match
treeALeftIndex = 0
treeBLeftIndex = 0
treeARightIndex = 2
treeBRightIndex = 2
Slide 25
Slide 25 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“3” li key=“1” li key=“2” li key=“4” li key=“5”
ٔ
ٔ،
،
Match
treeALeftIndex = 0
treeBLeftIndex = 1
treeARightIndex = 2
treeBRightIndex = 2
Slide 26
Slide 26 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“3” li key=“1” li key=“2” li key=“4” li key=“5”
ٔ
ٔ،
،
Match
treeALeftIndex = 1
treeBLeftIndex = 2
treeARightIndex = 2
treeBRightIndex = 2
Slide 27
Slide 27 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“4” li key=“2” li key=“3” li key=“1” li key=“5”
ؙ
ؙٗ
ٗأ
أ٥
٥ٔ
ٔ،
،
Unmatch
Unmatch
treeALeftIndex = 0
treeBLeftIndex = 0
treeARightIndex = 4
treeBRightIndex = 4
Match
Slide 28
Slide 28 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“4” li key=“2” li key=“3” li key=“1” li key=“5”
ؙ
ؙٗ
ٗأ
أ٥
٥ٔ
ٔ،
،
Unmatch
Match
treeALeftIndex = 0
treeBLeftIndex = 0
treeARightIndex = 3
treeBRightIndex = 3
Slide 29
Slide 29 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“4” li key=“2” li key=“3” li key=“1” li key=“5”
ؙ
ؙٗ
ٗأ
أ٥
٥ٔ
ٔ،
،
Unmatch
Unmatch
treeALeftIndex = 0
treeBLeftIndex = 1
treeARightIndex = 2
treeBRightIndex = 3
Match
Slide 30
Slide 30 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“4” li key=“2” li key=“3” li key=“1” li key=“5”
ؙ
ؙٗ
ٗأ
أ٥
٥ٔ
ٔ،
،
treeALeftIndex = 1
treeBLeftIndex = 1
treeARightIndex = 2
treeBRightIndex = 2
Match
Slide 31
Slide 31 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“4” li key=“2” li key=“3” li key=“1” li key=“5”
ؙ
ؙٗ
ٗأ
أ٥
٥ٔ
ٔ،
،
treeALeftIndex = 2
treeBLeftIndex = 2
treeARightIndex = 2
treeBRightIndex = 2
Match
Slide 32
Slide 32 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“5” li key=“3” li key=“1” li key=“4” li key=“2”
ֲ
ֲת
תֻ
ְֻ
ְַ
ַז
זְ
ְ㜥
㜥さ
さ
Unmatch
Match
treeALeftIndex = 0
treeBLeftIndex = 0
treeARightIndex = 4
treeBRightIndex = 4
Slide 33
Slide 33 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“5” li key=“3” li key=“1” li key=“4” li key=“2”
ֲ
ֲת
תֻ
ְֻ
ְַ
ַז
זְ
ְ㜥
㜥さ
さ
Unmatch
Unmatch
treeALeftIndex = 0
treeBLeftIndex = 1
treeARightIndex = 3
treeBRightIndex = 4
Unmatch
Unmatch
Slide 34
Slide 34 text
Virtual DOM Implementation
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“5” li key=“1” li key=“3” li key=“4” li key=“2”
ֲ
ֲת
תֻ
ְֻ
ְַ
ַז
זְ
ְ㜥
㜥さ
さ
treeALeftIndex = 0
treeBLeftIndex = 0
treeARightIndex = 4
treeBRightIndex = 4
{1: 1, 3: 2, 4: 3, 2: 4} = {key: index}
Map
Slide 35
Slide 35 text
Virtual DOM Implementation
ֲתְַֻ׆ծMapך欰䧭ָ䗳銲ז؛٦أדծ
剑㼭ך眔㔲דMap欰䧭ֽׅד幥ךד⸬桦ָ״ְկ
li key=“1” li key=“2” li key=“3” li key=“4” li key=“5”
li key=“5” li key=“1” li key=“3” li key=“4” li key=“2”
この範囲
この範囲
Slide 36
Slide 36 text
Virtual DOM Implementation
㛇劤涸חٓٝتيחؗ٦ָꂁ縧ׁⶴさכSortedծReversed״⡚
ְկ
KeyMapָ㹋ꥷח䗳銲חזתד欰䧭鹼䒀ֿׅהדծًٌٔծ鸞䏝
涸זؔ٦غ٦قحس䫇ִկ
Slide 37
Slide 37 text
Virtual DOM Implementation
ReactךJSXכꬊ䌢ח⸬桦ָ䝤ְկ
暴ח㶨銲稆חꂁה俑㶵ָ幉גֻךד䪔ְבְկ
ReactכflattenChildrenהְֲꟼ侧ד㶨銲稆ٖؗ؎ח׃גְկ
ַָֿז鹼ֻג搀꼽ָ㢳ְկ
זךדծ✮ReactElement⡲גְֶגծflyweightػة٦ٝדⱄⵃ欽
׃אאծ؎ٝة٦ؿؑ٦أׇ֮կ
JSX
Slide 38
Slide 38 text
Virtual DOM Implementation
• Ⰻגٍؗحءُׅկ
• createElementכ⢪זְկCloneׅ
• ReactElementכؙٓأחׅկ
Others
Slide 39
Slide 39 text
Virtual DOM Implementation
灶唱ׅץֹDOM銲稆כ㶨銲稆ה㾩䚍《ꤐְ䖓ծ
Recylcerח״ג㔐 ׁծ如ךcreateElementךؿؑ٦ؤדⱄⵃ欽ׁ
תׅկ
ֿח״ג倜鋉DOM欰䧭ך؝أزקרחկ
׃ծًٌٔ㖇鶕ׅךדֿכزٖ٦سؔؿկ
Caches
Slide 40
Slide 40 text
Virtual DOM Implementation
倜鋉銲稆ך⡲䧭ָ䗳銲ז㜥さכծةؚせהDOM銲稆ךMapחٍؗحءُ
׃גֶֹծcloneElementׅկ
createElement״㼰׃傍ְկ
cloneElement
Slide 41
Slide 41 text
Virtual DOM Implementation
ReactElementכؔـآؙؑزדכזֻծ؝ٝأزؙٓةַ欰䧭ׅק
ֲָծ鸞䏝ָ傍ֻזկ
V8ךMapؔـآؙؑزך暴㹀ָ넝鸞חזַַ׃זְկ
Constructor over Object
Slide 42
Slide 42 text
Virtual DOM Implementation
穠卓
Fuel 96131
React 192195
React-lite 107019
Slide 43
Slide 43 text
Virtual DOM Implementation
׃ծֿךذأزכֻ֮תדծإٔ٦فحزךذأزד׃ַזְկ
ٖ؎ذٝءכذأز穠卓חכ植זְկ
זךדծrequestAnimationFrameהַ⢪ֲה׃䝤⻉ׅկ
ֿךذأزכֻ֮תדծPatchך♧涸זػؿؓ٦وٝأկ
ֿךذأز穠卓דؿٖ٦يٙ٦ؙך⮚⸋寸ץ
ֹדכזְ