Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Webアプリケーションで 60fpsを(極力)目指す
Search
pastak
March 21, 2017
Technology
11k
19
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Webアプリケーションで 60fpsを(極力)目指す
KMC 春合宿2017で発表したトークです。
pastak
March 21, 2017
More Decks by pastak
See All by pastak
アクセシビリティの向上がそのまま事業貢献になると良い
pastak
3
560
幕間CMを支える技術
pastak
4
720
無からniboshiを生み出す
pastak
0
46
Helpfeelがアクセシビリティにどのように取り組み始めて、どこまで来れたのか/Helpfeel Accessibility 2025-07
pastak
3
660
LT: JavaScript / HTML カルトクイズ
pastak
0
210
「夏フェス」をヒントに新しいカンファレンスを考えてみた at 函館市電LT
pastak
3
610
「アクセシビリティを始めたい!」から1年、あれからどうなったのか。
pastak
2
280
「アクセシビリティを始めたい!」から1年、あれからどうなったのか。 〜LTバージョン〜
pastak
1
1.1k
【2024年最新】「エンジニアお茶会」という取り組みについて
pastak
1
570
Other Decks in Technology
See All in Technology
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
920
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
250
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
440
AIは「聞けば答える」から「任せると自分で進める」へ - JACTIMペナン地域部会・ペナン三水会講演
knishioka
0
120
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
2.4k
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
390
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
Kiro Crewをはじめよう
kizawa2020
1
160
オントロジーって 結局なにもの? AI エージェントに「意味」を渡す知識設計の話
greenmidori
0
180
しろおびから始める!ログ活用の第一歩
shumei_ito
0
950
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.6k
Featured
See All Featured
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
450
Ethics towards AI in product and experience design
skipperchong
2
430
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
710
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Git: the NoSQL Database
bkeepers
PRO
433
67k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Transcript
WebΞϓϦέʔγϣϯͰ 60fpsΛ(ۃྗ)ࢦ͢ Pasta-K
[email protected]
at KMC Spring Camp 2017
@pastakɹ
@pastakɹ • ژେֶͰֶੜΛ͍ͬͯ·͢ • Nota Inc Gyazo։ൃνʔϜ ΞϧόΠτ • JavaScript
/ React • Ruby on Rails • Browser Extension
None
@pastakɹ • ژେֶͰֶੜΛ͍ͬͯ·͢ • ژେϚΠίϯΫϥϒ • ݩใ • JavaScriptͰੈքฏ2014 •
KMCτοϓϖʔδ୲ • ҿञ
ຊͷ͓ॻ͖ • Σϒϒϥβʹ͍ͭͯ • ϒϥβͷΈհɾιϑτΣΞߏ • ϒϥβ্ͰͷΞχϝʔγϣϯͱϨϯμϦϯάΤϯδϯ • Ξχϝʔγϣϯ࣌ͷϒϥβͷৼΔ͍ •
Chrome DevToolΛ༻͍ͨݕূʹ͍ͭͯ • 60fpsΛग़ͨ͢ΊʹؾΛ͚͓͖͍ͯͨදతͳςΫχοΫ
ࠓ͞ͳ͍͜ͱ • RenderingΤϯδϯJavaScriptΤϯδϯͷৄࡉ ͳৼΔ͍ʹ͍ͭͯ • JSCSSͷҎ֎ͷΣϒΞϓϦέʔγϣϯߴ ԽΞϓϩʔνʹ͍ͭͯ(ίϯςϯπ৴ͷͳ Ͳ) • ͦͷଞ؆୯ͷͨΊʹઆ໌Λলུͨ͠Γ͍ͯ͠·͢
λʔήοτͱΰʔϧʹ͍ͭͯ • λʔήοτ • ϒϥβͰಈ͘JSΛॻ͍͍ͯΔਓʢಛʹΞχϝʔ γϣϯΛצͰ͍͍ͬͯͬͯΔਓʣ • ࠓޙͦͷΑ͏ͳ͜ͱΛ͢ΔՄೳੑͷ͋Δਓ • ΰʔϧ
• ॴҦʰψϧψϧಈ͘ʱը໘ͷͨΊʹඞཁͳ͜ͱͷ ֓ཁΛ௫Ή = ԿނʰΨλͭ͘ʱͷ͔ΛΔ
߹ΘͤͯಡΈ͍ͨ • ͜ͷεϥΠυαϘͬͨͷͰɺҎԼͷεϥΠυΛݩʹϒϥβͷ ྺ࢙ʹؔ͢Δઆ໌ΛͬͯɺϨϯμϦϯά࣮ྫͱղઆʹ͍ͭͯ૿ ͨ͠ࢿྉʹͳΓ·͢ ͓͖͍ͬͯͨϒϥβʹ͍ͭͯͷجૅೖ // Speaker Deck https://speakerdeck.com/pastak/zhi-tuteokitaiburauzanituitefalseji-chu-ru-men
ຊͷ͓ॻ͖ • Σϒϒϥβʹ͍ͭͯ • ϒϥβͷΈհɾιϑτΣΞߏ • ϒϥβ্ͰͷΞχϝʔγϣϯͱϨϯμϦϯάΤϯδϯ • Ξχϝʔγϣϯ࣌ͷϒϥβͷৼΔ͍ •
Chrome DevToolΛ༻͍ͨݕূʹ͍ͭͯ • 60fpsΛग़ͨ͢ΊʹؾΛ͚͓͖͍ͯͨදతͳςΫχοΫ
Σϒϒϥβ ͷجຊߏ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 ΞυϨεόʔɾπʔϧόʔ ֤छϘλϯ ਐΉΔ ϒοΫϚʔΫɹͳͲ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 6*ͱ֤छΤϯδϯͱͷ ϝοηʔδͷΓऔΓΛհ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 )5.-9.-Λύʔε͠ɺ ը໘ʹදࣔ͢ΔͨΊͷ ϨΠΞτΛߏங͢Δ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 )551'51ͳͲΛΔ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 +BWB4DSJQUͷ࣮ߦ݁ՌΛ 3FOEFSJOH&OHJOFʹ͢
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 σΟεϓϨΠ ϓϦϯλ ͦͷଞग़ྗ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 ࠓ͔͜͜Β ͜ͷͭʹͯ͠ ۷ΓԼ͛ͯΈ·͢
ϨϯμϦϯάΤϯδϯͷׂ • ϨϯμϦϯάΤϯδϯHTML / XML Λύʔε • CSSΛύʔε͠ελΠϧϧʔϧΛѲ • HTMLΛCSSϧʔϧʹج͍ͮͯදࣔΛஔ
• ඳըͷੜ ※ҎԼͰHTMLͱͷΈදه͠·͢
ϨϯμϦϯάΤϯδϯͷׂ • ϨϯμϦϯάΤϯδϯHTML / XML Λύʔε • CSSΛύʔε͠ελΠϧϧʔϧΛѲ • HTMLΛCSSϧʔϧʹج͍ͮͯදࣔΛஔ
• ඳըͷੜ -BZPVU 1BSTF 1BJOU
ϨϯμϦϯάϑϩʔͷҰྫ https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/
JavaScriptΠϯλʔϓϦλͷׂ • JavaScriptͷղੳɾ࣮ߦ
JavaScriptΠϯλʔϓϦλͷׂ • JavaScriptͷղੳɾ࣮ߦ &WBMVBUF
۩ମతͳ Σϒϒϥβ ʹ͍ͭͯ
Question • ChromeͱFirefoxԿ͕ҧ͏ͷʁ • ChromeͱOperaԿ͕ҧ͏ʁ
None
Chrome Opera Vivaldi Safari Firefox Internet Explorer Edge
Chrome Opera Vivaldi Safari Firefox Internet Explorer Edge #MJOL 7
#MJOL 7 8FCLJU +BWB4DSJQU $PSF 5SJEFOU $IBLSB (FDLP 4QJEFS .POLFZ #MJOL 7 &EHF)5.- $IBLSB ϨϯμϦϯάΤϯδϯ +4ΠϯλʔϓϦλ
Chrome Opera Vivaldi Safari Firefox Internet Explorer Edge Based (Forked)
Chromium
Chrome Opera Vivaldi #MJOL 7 #MJOL 7 #MJOL 7 ڞ௨
ҟͳΔ
Question • ChromeͱFirefoxԿ͕ҧ͏ͷʁ • ChromeͱOperaԿ͕ҧ͏ʁ ෦ར༻͍ͯ͠Δ Τϯδϯ͕ҟͳΔ
Question • ChromeͱFirefoxԿ͕ҧ͏ͷʁ • ChromeͱOperaԿ͕ҧ͏ʁ ྆ํಉ͡$ISPNJVNΛ ϕʔεʹར༻͍ͯ͠Δ͕ɺ 6*ͳͲ͕ҟͳΔ
ϨϯμϦϯάϑϩʔ ʹͯ͠ΈΔ
ϨϯμϦϯάΤϯδϯͷׂ • ϨϯμϦϯάΤϯδϯHTML / XML Λύʔε • CSSΛύʔε͠ελΠϧϧʔϧΛѲ • HTMLΛCSSϧʔϧʹج͍ͮͯදࣔΛஔ
• ඳըͷੜ -BZPVU 1BSTF 1BJOU
ϨϯμϦϯάΤϯδϯͷׂ • ϨϯμϦϯάΤϯδϯHTML / XML Λύʔε • CSSΛύʔε͠ελΠϧϧʔϧΛѲ • HTMLΛCSSϧʔϧʹج͍ͮͯදࣔΛஔ
• ඳըͷੜ • ↑ΛϨΠϠʔ͝ͱʹੜͷޙɺ߹ -BZPVU 1BSTF 1BJOU $PNQPTJUF -BZFST
JSͰΞχϝʔγϣϯͤ͞Δͱ… • JSΠϯλʔϓϦλ͕JavaScriptΛ࣮ߦ • DOMπϦʔΛมߋ • ϨϯμϦϯάΤϯδϯ͕ελΠϧΛ࠶ܭࢉ • ϨΠΞτΛੜ •
ϨΠϠʔ͝ͱʹඳըΛੜ • ϨΠϠʔΛ߹͠࠷ऴతͳϨϯμϦϯά݁ՌΛੜ &WBMVBUF $BMDVSBUF 4UZMFT -BZPVU BLBSFqPX 1BJOU $PNQPTJUF-BZFST
Chrome DevtoolͷTimeLine https://www.html5rocks.com/en/tutorials/speed/high-performance-animations/
DEMO http://codepen.io/paulirish/full/nkwKs/ http://codepen.io/paulirish/full/LsxyF/
ͭ·Γ • ҐஔͳͲ͚ͩΛಈ͔͢߹ CSS transform Λར༻͢Δͱ Composite Layers͚ͩͳͷͰૉ ૣ͘ऴྃ͢Δ
+4͔Β MFGUͳͲΛ มߋͨ͠߹
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 +BWB4DSJQUͷ࣮ߦ݁ՌΛ 3FOEFSJOH&OHJOFʹ͢
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 ը໘ʹදࣔ͢ΔͨΊͷ ϨΠΞτΛߏங͢Δ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 ΓऔΓΛհ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 σΟεϓϨΠʹ දࣔ͢Δ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 +BWB4DSJQUͷ࣮ߦ݁ՌΛ 3FOEFSJOH&OHJOFʹ͢
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 ը໘ʹදࣔ͢ΔͨΊͷ ϨΠΞτΛߏங͢Δ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 ΓऔΓΛհ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 σΟεϓϨΠʹ දࣔ͢Δ
$44ͷ USBOTGPSNͰ มߋͨ͠߹
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 ը໘ʹදࣔ͢ΔͨΊͷ ϨΠΞτΛߏங͢Δ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 ΓऔΓΛհ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 σΟεϓϨΠʹ දࣔ͢Δ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 ը໘ʹදࣔ͢ΔͨΊͷ ϨΠΞτΛߏங͢Δ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 ΓऔΓΛհ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378 σΟεϓϨΠʹ දࣔ͢Δ
Chrome DevtoolͷTimeLine https://www.html5rocks.com/en/tutorials/speed/high-performance-animations/
Chrome DevtoolͷTimeLine https://www.html5rocks.com/en/tutorials/speed/high-performance-animations/ ্ͷϑϩʔ͕ൃੜͨ͠߹ جຊతʹͦΕҎ߱ͷϑϩʔ͕ ॱ൪ʹൃੜ͢Δ
ͭ·Γ • ҐஔͳͲ͚ͩΛಈ͔͢߹ CSS transform Λར༻͢Δͱ Composite Layers͚ͩͳͷͰૉ ૣ͘ऴྃ͢Δ •
ग़དྷΔݶΓ͍ܰϨϯμϦϯάϑϩʔͰऩ·Δ Α͏ʹ͍ͯ͘͠ͱྑ͍
GQTΛग़ͨ͢ ΊʹؾΛ͚ͨ ͍දతͳςΫ χοΫΛհ
ຊհ͢ΔςΫχοΫҰཡ • Forced Synchronous Layout • CSS Containment • scrollδϟϯΫ
• GPUΞΫηϥϨʔγϣϯΛ༗ޮతʹར༻͢Δ • CSS `will-change` • ίϥϜ: repaintͷλΠϛϯά͍͔ͭ
ςΫχοΫΛհ͢Δલʹ • ChromeͷDevToolͰ͜ΕΒΛܭଌͨ͠Γ؍ଌ ͨ͠Γग़དྷΔ • (͜͜ʹεΫγϣΛೖΕ͔͕ͨͬͨΘΓʹ࣮ ը໘Ͱઆ໌͠·͢)
'PSDFE 4ZODISPOPVT -BZPVU
JSͰΞχϝʔγϣϯͤ͞Δͱ… • JSΠϯλʔϓϦλ͕JavaScriptΛ࣮ߦ • DOMπϦʔΛมߋ • ϨϯμϦϯάΤϯδϯ͕ελΠϧΛ࠶ܭࢉ • ϨΠΞτΛੜ •
ϨΠϠʔ͝ͱʹඳըΛੜ • ϨΠϠʔΛ߹͠࠷ऴతͳϨϯμϦϯά݁ՌΛੜ &WBMVBUF $BMDVSBUF 4UZMFT -BZPVU BLBSFqPX 1BJOU $PNQPTJUF-BZFST
JSͰΞχϝʔγϣϯͤ͞Δͱ… • JSΠϯλʔϓϦλ͕JavaScriptΛ࣮ߦ • DOMπϦʔΛมߋ • ϨϯμϦϯάΤϯδϯ͕ελΠϧΛ࠶ܭࢉ • ϨΠΞτΛੜ •
ϨΠϠʔ͝ͱʹඳըΛੜ • ϨΠϠʔΛ߹͠࠷ऴతͳϨϯμϦϯά݁ՌΛੜ &WBMVBUF $BMDVSBUF 4UZMFT -BZPVU BLBSFqPX 1BJOU $PNQPTJUF-BZFST ͜ͷͱ͖'PSDFE4ZODISPOPVT-BZPVUͱݺΕΔϨΠΞτܭࢉॲཧ͕ Δͱ+4ͷ࣮ߦΛϒϩοΫͯ͠ϨΠΞτܭࢉΛߦ͏ɻ ྫFMFNPGGTFU-FGUFMFNHFU$MJFOU3FDUT FMFNDMJFOU8JEUI ͜ΕΒͷΛਖ਼͘͠ΔʹݱࡏͷϨΠΞτʹ͍ͭͯϨϯμϦϯάΤϯδϯ͕ ܭࢉΛߦ͏ඞཁ͕͋ΔͷͰɺ͜ΕΒͷΛ༻͍ͨ+4ΞχϝʔγϣϯΛهड़͢Δͱ ࣮ࡍͷϨϯμϦϯάͱผͰϨΠΞτܭࢉ͕ਵ࣮࣌ߦ͞ΕΔͨΊ ඇৗʹ͘ͳͬͯ͠·͏
JSͰΞχϝʔγϣϯͤ͞Δͱ… • JSΠϯλʔϓϦλ͕JavaScriptΛ࣮ߦ • DOMπϦʔΛมߋ (include Forced Synchronous Layout) •
ϨϯμϦϯάΤϯδϯ͕ελΠϧΛ࠶ܭࢉ • ϨΠΞτΛੜ • ϨΠϠʔ͝ͱʹඳըΛੜ • ϨΠϠʔΛ߹͠࠷ऴతͳϨϯμϦϯά݁ՌΛੜ
JSͰΞχϝʔγϣϯͤ͞Δͱ… • JSΠϯλʔϓϦλ͕JavaScriptΛ࣮ߦ • DOMπϦʔΛมߋ (include Forced Synchronous Layout) w
ϨΠΞτΛੜ w ϨΠϠʔ͝ͱʹඳըΛੜ w ϨΠϠʔΛ߹͠࠷ऴతͳϨϯμϦϯά݁ՌΛੜ w ϨϯμϦϯά݁Ռ͔ΒΛฦ٫ • ϨϯμϦϯάΤϯδϯ͕ελΠϧΛ࠶ܭࢉ • ϨΠΞτΛੜ • ϨΠϠʔ͝ͱʹඳըΛੜ • ϨΠϠʔΛ߹͠࠷ऴతͳϨϯμϦϯά݁ՌΛੜ
DEMO https://googlesamples.github.io/web-fundamentals/ tools/chrome-devtools/rendering-tools/forcedsync.html
$44 $POUBJONFOU
css containment • cssͷcontainϓϩύςΟΛར༻͢Δ͜ͱͰϨϯμϦ ϯάʹؔΘΔ֤छৼΔ͍Λ੍ޚͰ͖Δ
css containment • cssͷcontainϓϩύςΟΛར༻͢Δ͜ͱͰϨϯμϦ ϯάʹؔΘΔ֤छৼΔ͍Λ੍ޚͰ͖Δ • size: ཁૉͷαΠζ͕ࢠཁૉίϯςϯπʹӨڹ͞ Εͳ͘ͳΔ •
layout: ܑఋཁૉͷϨΠΞτʹӨڹΛ༩͑ͳ͍ • paint: ཁૉڥքͷ֎ଆʹϖΠϯτΛߦΘͳ͍
css containment • cssͷcontainϓϩύςΟΛར༻͢Δ͜ͱͰϨϯμϦ ϯάʹؔΘΔ֤छৼΔ͍Λ੍ޚͰ͖Δ • size: ཁૉͷαΠζ͕ࢠཁૉίϯςϯπʹӨڹ͞ Εͳ͘ͳΔ •
layout: ܑఋཁૉͷϨΠΞτʹӨڹΛ༩͑ͳ͍ • paint: ཁૉڥքͷ֎ଆʹϖΠϯτΛߦΘͳ͍
css containment • cssͷcontainϓϩύςΟΛར༻͢Δ͜ͱͰϨϯμϦ ϯάʹؔΘΔ֤छৼΔ͍Λ੍ޚͰ͖Δ • size: ཁૉͷαΠζ͕ࢠཁૉίϯςϯπʹӨڹ͞ Εͳ͘ͳΔ •
layout: ܑఋཁૉͷϨΠΞτʹӨڹΛ༩͑ͳ͍ • paint: ཁૉڥքͷ֎ଆʹϖΠϯτΛߦΘͳ͍ ಛʹ͜ͷ2ͭͷΛࢦఆ͢Δͱ ϨϯμϦϯάϑϩʔͷ੍ޚʹڧ͍ӨڹΛ ༩͑Δ͜ͱ͕Ͱ͖Δ
DEMO http://codepen.io/ahomu/pen/ZpKGrN
TDSPMMδϟϯΫ
scrollδϟϯΫ • ϞόΠϧڥͳͲͰεΫϩʔϧͷ٧·Γ(scroll-jank) Λղܾ͢ΔͨΊͷΈͱͯ͠ɺPassive Event Listeners͕ಋೖ͞Εͨ • εΫϩʔϧΛൃੜͤ͞ΔΠϯλϥΫγϣϯΛ࣮ ͢ΔࡍͷtouchstarttouchendͰ event.preventDefault()ΛݺΕ(Δ|ͳ͍)͜ͱΛอ
ূ͢Δ
Passive Event Listeners • preventDefault()Λݺͳ͍͜ͱΛอূ͢Δ߹ɺ addEventListener()ͷୈ3Ҿʹ{passive: true}Λ ͢͜ͱͰ࣮ݱͰ͖Δ
⚠ޓੑͷʹ͍ͭͯ • Passive ListenerʹରԠ͍ͯ͠ͳ͍ϒϥβͷ߹ɺ addEventListerͷୈ3Ҿ useCapture ͕trueͰ͋Δͱͯ͠ѻΘ Εͯ͠·͏ • ΠϕϯτόϒϦϯάϑΣʔζͰͳ͘ɺΩϟϓνϟϦϯά
ϑΣʔζͰൃՐ͞ΕΔ͜ͱʹͳΔɻ • Event Listener Options ରԠҎ߱ɺ͜͜ʹΦϒδΣΫτΛ͢ ͜ͱʹͳΔͨΊɺ useCapture ϑϥά૬ɺ {capture: true} ͱͯ͠ϓϩύςΟʹΑΔఆٛΛߦ͏ɻ
DEMO http://labs.jxck.io/passive-event-listeners/index.html
(16ΞΫηϥ ϨʔγϣϯΛ ༗ޮతʹར༻ ͢Δ
GPUΞΫηϥϨʔγϣϯ͕༗ޮʹͳΔέʔε • CSSͷopacitytransformɺrorateͳͲΛར༻ ͨ͠߹ • Composite LayersͷϑΣΠζͱݴͬͯྑ͍
css: will-change • ͜ͷઌى͖ΔϨϯμϦϯά༰Λ௨͠ɺɹ ϨϯμϦϯάϨΠϠʔΛϒϥβʹ༧Ί४උ ͓ͯ͘͠Α͏ཁ͕Ͱ͖Δ • ͜ͷϨϯμϦϯάϨΠϠʔͷੜʹGPU ͕ޮ͘
⚠ར༻࣌ͷҙ • ͜ͷϓϩύςΟΛCSSͰ༧Ίࢦఆͯ͠͠·͏ͱϨϯμϦϯά ϨΠϠʔͷΩϟογϡ͕େྔʹੜ͞Εͯ͠·͍ύϑΥʔϚ ϯεʹѱӨڹΛ༩͑ͯ͠·͏ • JSΛར༻ͯ͠ඞཁͳλΠϛϯάͰ༩͢Δͷ͕ྑ͍ͱ͞Εͯ ͍Δ • ͕ɺJSͰ༩͢ΔλΠϛϯά͕લ͗͢ΔͱϨϯμϦϯάϨ
ΠϠʔΛཪͰੜ͢Δ༛༧͕ΓͣޮՌ͕ൃشͰ͖ͳ͍߹ ͕͋Δ
GPUΞΫηϥϨʔγϣϯ͕༗ޮʹͳΔέʔε • CSSͷopacitytransformɺrorateͳͲΛར༻ ͨ͠߹ • Composite LayersͷϑΣΠζͱݴͬͯྑ͍
GPUΞΫηϥϨʔγϣϯ͕༗ޮʹͳΔέʔε • CSSͷopacitytransformɺrorateͳͲΛར༻ ͨ͠߹ • Composite LayersͷϑΣΠζͱݴͬͯྑ͍ • ͏1ͭڧʹޮ͔ͤΔํ๏͕͋Δʂʂʂ
GPUΞΫηϥϨʔγϣϯ͕༗ޮʹͳΔέʔε • CSSͷopacitytransformɺrorateͳͲΛར༻ ͨ͠߹ • Composite LayersͷϑΣΠζͱݴͬͯྑ͍ • ͏1ͭڧʹޮ͔ͤΔํ๏͕͋Δʂʂʂ •
<canvas>ͷඳըGPU͕ޮ͘ʂʂʂʂʂʂ
ۃʹ<canvas>Λར༻ͨ͠ྫ • FlipboardͷεϚϗ൛ • શͯͷϏϡʔ͕<canvas>্ʹඳ͔Ε͍ͯΔ • https://github.com/Flipboard/react- canvas
DEMO
ίϥϜ SFQBJOUSFqPX ͷλΠϛϯά ͍͔ͭ
repaint/reflow timing • DOMʹૠೖͨ͠Node͍ͭϨϯμϦϯά͞ΕΔͷ͔ • ref: ReactͷcomponentDidMount͕ൃՐ͢Δͱ͖ɺ Mount͞Ε͍ͯΔ͕ɺຊʹϨϯμϦϯά͞Εͯ ͍Δͷ͔ʁ •
repaint͞ΕΔΑΓૣ͍߹ɺclientHeightͳͲ͕ظ ͨ͠ΛऔಘͰ͖ͳ͍
݁
݁ • ݫີʹਖ਼͍͠repaintޙͷλΠϛϯά (onpaintతͳ)ΛΔ͜ͱग़དྷͳ͍ • window.requestAnimationFrameͱ͔ʁ
·ͱΊ
Σϒϒϥβͷجຊߏ http://www.slideshare.net/quangntta/web-browser-architecture-49196378
ϨϯμϦϯάϑΣΠζʹ͍ͭͯ • JSΠϯλʔϓϦλ͕JavaScriptΛ࣮ߦ • DOMπϦʔΛมߋ • ϨϯμϦϯάΤϯδϯ͕ελΠϧΛ࠶ܭࢉ • ϨΠΞτΛੜ •
ϨΠϠʔ͝ͱʹඳըΛੜ • ϨΠϠʔΛ߹͠࠷ऴతͳϨϯμϦϯά݁ՌΛੜ &WBMVBUF $BMDVSBUF 4UZMFT -BZPVU BLBSFqPX 1BJOU $PNQPTJUF-BZFST
ຊհͨ͠ςΫχοΫҰཡ • Forced Synchronous Layout • CSS Containment • scrollδϟϯΫ
• GPUΞΫηϥϨʔγϣϯΛ༗ޮతʹར༻͢Δ • CSS `will-change` • ίϥϜ: repaintͷλΠϛϯά͍͔ͭ
͞Βʹৄ͘͠Γ͍ͨ߹ • How browsers work - http://taligarsiel.com/Projects/ howbrowserswork1.htm • ϒϥβͷ෦ͰԿ͕ى͖͍ͯΔͷ͔ʹ͍ͭͯ
• Demystifying (JavaScript) Engines - https://github.com/ a0viedo/demystifying-js-engines • JavaScriptΤϯδϯͷ෦ߏʹ͍ͭͯཧղ͢ΔͨΊͷઆ ໌ɾؔ࿈จͳͲͷϦϯΫू • ͦͷଞࢀߟURLͳͲ: http://bit.ly/pastak-shownote-20170217