Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
やさしい仮想DOM
Search
Ryo Nakamura
April 25, 2019
Technology
1
190
やさしい仮想DOM
about Virtual DOM
Ryo Nakamura
April 25, 2019
Tweet
Share
More Decks by Ryo Nakamura
See All by Ryo Nakamura
楽しいProxy
ryonkmr
2
110
Other Decks in Technology
See All in Technology
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Musicを例に~
otanet
0
320
How to Lead? Testimonial of a Lead Android Engineer
oleur
1
120
【基本】データベース設計
oracle4engineer
PRO
2
270
認知症フレンドリーテックとスタックチャン
naokiuc
0
380
AWSに詳しくない人でも始められるコスト最適化ガイド
yuhta28
2
420
M5stackで使用できるpHセンサの開発
shinrinakamura
1
290
NewSQL Landscape
oracle4engineer
PRO
2
2.5k
社内アプリで Cloudflare D1を プロダクト運用してみた体験談(Tokyo)
haochenx
0
130
2024春 注目のWeb系 OSS & SaaS 3選
makies
0
210
CockroachDB はどのくらい「しぶとい」のか? / How tough is CockroachDB?
kota2and3kan
6
3.9k
How to do well in consulting–Balkan Ruby 2024
irinanazarova
0
180
LayerXにおけるLLMプロダクト開発の今までとこれから
layerx
PRO
4
1.4k
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
261
12k
Testing 201, or: Great Expectations
jmmastey
30
6.4k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Fashionably flexible responsive web design (full day workshop)
malarkey
398
65k
How to name files
jennybc
65
93k
Happy Clients
brianwarren
92
6.4k
Designing with Data
zakiwarfel
96
4.8k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.7k
Building Flexible Design Systems
yeseniaperezcruz
320
37k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
660
120k
Optimizing for Happiness
mojombo
370
69k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
188
16k
Transcript
RyoNkmr PROJECT DATE AUTHOR 2019-04-25 ͍͞͠ԾDOM @WE ARE JAVASCRIPTERS! #31
RyoNkmr •tw: @RyoNkmr_ •GH: RyoNkmr •frontend: 3 years+
͍͞͠ԾDOM
͕ࠢ͑ΔʁੈքΛֵ໋͢Δྗʁٹੈओʁ͍ʁ
ԾDOMͬͯੌ͍
ੌ͍→ຐ๏
ຐ๏→Θ͔ΒΜ
Α͘Θ͔Βͳ͍ →ා͍
ଟগΘ͔Δ →ଟগා͘ͳ͍
͍͞͠ԾDOM
ԾDOMͱ
ԾDOM࣮ͱ
DOM TreeΛ ͱͯ͠දݱ →ԾDOM Tree
ԾDOMTreeͷมߋΛ ݩʹ࠷খݶͷDOM APIΛ ར༻࣮ͯ͠ࡍͷDOMTree ʹө͢Δ
JSX
JSX ೖΕࢠͷؔ܈ ม
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
ʔ…
ͳΜͱͳ͘ ٕज़ཁૉΛ ཧղ͢Δ
JSX
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
const goodOldDays = <p style="width: 240px;”> 昔は良かったなあ </p> React.js Ͱ͓ͳ͡ΈͰ͢Ͷ
͜Ε͕
var goodOldDays = React.createElement( "p", { style: "width: 240px;" },
"昔は良かったなあ" ); ͜͏ͳΔ ※@babel/preset-react ʹ௨͚ͨͩ͠
DOM
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
Document Object Model
<!DOCTYPE html> <html> <head> <title>やさしいVirtualDOM</title> </head> <body> <h1>やさしいVirtualDOM</h1> <p>昔々あるところに、おじいさんとおばあさんとNull</p> </body>
</html> HTML
DOM Tree
DOM Tree p body head h1 ੲʑ ͋Δͱ͜Ζʹ… ͍͞͠ VirtualDOM
document html
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
DOM & DOM API JavaScript DOM Tree DOM API
DOM API body Լͷ̍ݸͷཁૉ͘Ε JavaScript DOM Tree DOM API
DOM API body Լͷ̍ݸͷཁૉ͘Ε JavaScript DOM Tree DOM API ͍͋Αʂ
h1 Ұஸʂ
DOM API body Լͷ̍ݸͷཁૉ͘Ε ͦͷ h1 ͷςΩετڭ͑ͯ JavaScript DOM Tree
DOM API ͍͋Αʂ h1 Ұஸʂ
DOM API body Լͷ̍ݸͷཁૉ͘Ε ͍͞͠ VirtualDOM JavaScript DOM Tree DOM
API ͍͋Αʂ h1 Ұஸʂ ͦͷ h1 ͷςΩετڭ͑ͯ
DOM API ͦΕΛ ”શʹཧղͨ͠” ʹ ॻ͖͑ͯ JavaScript DOM Tree DOM
API body Լͷ̍ݸͷཁૉ͘Ε ͍͞͠ VirtualDOM ͍͋Αʂ h1 Ұஸʂ ͦͷ h1 ͷςΩετڭ͑ͯ
ԾDOM
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
ԾDOM ԾDOM JavaScript
ϫγͷ৺ͷதʹ͋Δ DOM ԾDOM ԾDOM JavaScript
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
ԾDOMΛDOMʹө͢Δ
ઃܭॻΛ࣮ʹө͢Δ
DOM Tree DOM API ϫγͷ৺ͷதʹ͋Δ DOM ԾDOMΛDOMʹө͢Δ JavaScript ԾDOM
DOM Tree DOM API JavaScript ԾDOM <section> Λ࡞ͬͯ <h1>ͱ<p>Λࢠཁૉͱ ͯ͠࡞ͬͯೖΕͯ…
ԾDOMΛDOMʹө͢Δ
ԾDOMΛDOMʹө͢Δ ͨͷΉͰ DOM Tree DOM API JavaScript ԾDOM
ͨͷΉͰ ԾDOMΛDOMʹө͢Δ ͍͋Αʂ DOM Tree DOM API JavaScript ԾDOM
ԾDOMΛDOMʹө͢Δ ͏͓͓͓͓͓͓͓ DOM Tree DOM API JavaScript ԾDOM
ԾDOMΛDOMʹө͢Δ ࢦࣔͲ͓ΓͰ͖ͨ DOM Tree DOM API JavaScript ԾDOM
ԾDOMΛDOMʹө͢Δ ͋ͬ͟͢ʂ ࢦࣔͲ͓ΓͰ͖ͨ JavaScript ԾDOM DOM Tree DOM API
͋ͬ͟͢ʂ ԾDOMΛDOMʹө͢Δ ᘳͩ JavaScript ԾDOM DOM Tree DOM API
ԾDOMͷมߋࠩͱ ࠷খݶͷDOM APIͷར༻
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ JavaScript ԾDOM ؾ͕มΘͬͨ
DOM Tree DOM API
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ԾDOM JavaScript ؾ͕มΘͬͨ
DOM Tree DOM API
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ༿ͷ৭ͱ ΩϥΩϥ͚ͩมΘΔ ͜͜Λ͜ͷ৭ʹ
(ଞ৮Εͳ͍) ԾDOM JavaScript DOM Tree DOM API
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ͍͋Αʂ ԾDOM JavaScript
DOM Tree DOM API
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ͋ͬ͟͢ʂ ࢦࣔͲ͓ΓͰ͖ͨ ԾDOM
JavaScript DOM Tree DOM API
jQueryͱซ༻͢Δͳͬͯ ͍ΘΕΔύλʔϯ
DOM Tree DOM API উखʹফͨ͠Ζ͆ ผਓ֨ jQuery JavaScript ԾDOM
DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery উखʹফͨ͠Ζ͆ ʢ͋Εʁϫγͷ
ҙࢥʹͯ͠ ମ͕উखʹʣ ফͯ͘͠Ε
͍͋Αʂ DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery উखʹফͨ͠Ζ͆
DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery ফͤͳ͍ࠜͬ͜ Ҏ֎ফͨ͠
DOM Tree DOM API ফͤͳ͍ࠜͬ͜ Ҏ֎ফͨ͠ ϫϩλ JavaScript ԾDOM ผਓ֨
jQuery
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ؾ͕มΘͬͨ ʢਖ਼ؾʣ DOM
Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery
༿ͷ৭ͱ ΩϥΩϥ͚ͩ มΘΔ ͜͜Λ͜ͷ৭ʹ (ଞ৮Εͳ͍) ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM
API Λ͏ DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ͍͋Αʂ DOM Tree
DOM API JavaScript ԾDOM ผਓ֨ jQuery
༿ͬͺ͕ ͳ͍Αʂ ແཧʂ ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏
DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery
DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery
jQuery ͷ DOM ૢ࡞ͱ ซ༻͢ΔͱյΕΔ
·ͱΊ
ԾDOMΛݩʹ DOMʹө͢Δ࣮ 1. σʔλˠදࣔ
ԾDOMͷมԽͷ͔ࠩΒ શମΛߋ৽͢ΔͷͰͳ͘ ඞཁͳ෦ͷΈө͢Δ 2. ࠩߋ৽
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree
طଘͷ খ͞ΊͷVDOM࣮ ϥΠϒϥϦΛࢀߟʹ
࣮ͯ͠ΈΔͱ ຐ๏͡Όͳͯ͘ ׂͱటष͍͜ͱΛ ͬͯΔͷ͕Θ͔Δͱ ࢥ͍·͢
࡞ͬͯΈΑ͏ʂ VirtualNeko (https://github.com/RyoNkmr/vdom)
ࣗ࡞ϑϨʔϜϫʔΫΛֶͭͬͯ͘Ϳ ԾDOM࣮ફೖ | Black Everyday Company (https://kuroeveryday.blogspot.com/2018/11/how-to- create-virtual-dom-framework.html) ࢀߟ HyperApp
(https://github.com/jorgebucaran/hyperapp)
͝ਗ਼ௌ ͋Γ͕ͱ͏ ͍͟͝·ͨ͠