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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ryo Nakamura
April 25, 2019
Technology
1
230
やさしい仮想DOM
about Virtual DOM
Ryo Nakamura
April 25, 2019
Tweet
Share
More Decks by Ryo Nakamura
See All by Ryo Nakamura
楽しいProxy
ryonkmr
2
120
Other Decks in Technology
See All in Technology
MIX AUDIO EN BROADCAST
ralpherick
0
110
Microsoft Fabricで考える非構造データのAI活用
ryomaru0825
0
180
AIエージェントを用いたメンバー育成支援について
csakurah
0
100
DDD×仕様駆動で回す高品質開発のプロセス設計
littlehands
6
2.6k
QA組織のAI戦略とAIテスト設計システムAITASの実践
sansantech
PRO
1
210
SSoT(Single Source of Truth)で「壊して再生」する設計
kawauso
2
390
The Rise of Browser Automation: AI-Powered Web Interaction in 2026
marcthompson_seo
0
310
Sansanの認証基盤を支えるアーキテクチャとその振り返り
sansantech
PRO
1
110
20260323_データ分析基盤でGeminiを使う話
1210yuichi0
0
190
Agent Skill 是什麼?對軟體產業帶來的變化
appleboy
0
240
GitHub Actions侵害 — 相次ぐ事例を振り返り、次なる脅威に備える
flatt_security
8
5.5k
Astro Islandsの 内部実装を 「日本で一番わかりやすく」 ざっくり解説!
knj
0
300
Featured
See All Featured
Visualization
eitanlees
150
17k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Documentation Writing (for coders)
carmenintech
77
5.3k
How to build a perfect <img>
jonoalderson
1
5.3k
Paper Plane
katiecoart
PRO
0
48k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
780
Joys of Absence: A Defence of Solitary Play
codingconduct
1
320
ラッコキーワード サービス紹介資料
rakko
1
2.8M
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.8k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
850
KATA
mclloyd
PRO
35
15k
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)
͝ਗ਼ௌ ͋Γ͕ͱ͏ ͍͟͝·ͨ͠