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
reflow/repaint
Search
Yuta Hiroto
November 10, 2016
Technology
200
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
reflow/repaint
11/11の社内勉強会資料
Yuta Hiroto
November 10, 2016
More Decks by Yuta Hiroto
See All by Yuta Hiroto
Node8.3.0について
abouthiroppy
1
3.2k
ECMAScript
abouthiroppy
0
700
my tools
abouthiroppy
0
170
OSSを楽しむ話
abouthiroppy
0
190
React Nativeを触ってみた話
abouthiroppy
0
180
Other Decks in Technology
See All in Technology
シンガポールで登壇してきます
yama3133
0
340
”AIを使う” から ”AIに任せる” へ ─ 開発プロセスを再設計してAIを組織標準にするまで
cyberagentdevelopers
PRO
1
130
AI時代におけるテストの基礎の再定義 / Rethinking the Fundamentals of Testing in the AI Era
mineo_matsuya
4
1.7k
SoccerMaster: A Vision Foundation Model for Soccer Understanding
kzykmyzw
0
160
凡エンジニアがこの先生きのこるためには。〜TypeScript完全に理解したい〜
alchemy1115
2
400
Making sense of Google’s agentic dev tools
glaforge
1
300
設計レビューとAIハーネスで向き合う AIが生み出した新しいボトルネックの対処法 / Design Reviews and AI Harnesses Against New Bottlenecks Created by AI
nstock
3
390
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
510
kaonavi Tech Night#1
kaonavi
0
140
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
280
全社でのソフトウェアサプライチェーン攻撃対策をやってみた with Takumi Guard
z63d
0
200
PHPで作って学ぶリアルタイム音声対話AIとWebSocket入門 by ムナカタ
munakata
0
110
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
520
Facilitating Awesome Meetings
lara
57
7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
500
Design in an AI World
tapps
1
260
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
320
A designer walks into a library…
pauljervisheath
211
24k
Scaling GitHub
holman
464
140k
Google's AI Overviews - The New Search
badams
0
1.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Transcript
Reflow / Repaint Yuta Hiroto @about_hiroppy #frontier-js-2
Reflow / Repaint ؾʹ͔͚ͯ·͔͢ʁ
ͳͥؾʹ͢Δඞཁ͋Δͷʁ ෛՙ͕େ͖͘ɺύϑΥʔϚϯεʹ Өڹ͕͋Δ͔Β UXͷԼ
ϒϥβͷඳըϓϩηε DOM Tree Style Rules HTML CSS Render Tree Layout
Paint Display Webkitͷ؆ུϑϩʔ
ϒϥβͷඳըϓϩηε DOM Tree Style Rules HTML CSS Render Tree Display
Layout ࠓ͢ͷ͜͜ Paint
Layout(Reflow) • GekkoͰReflow, WebkitͰLayoutͱݺΕ·͢ • ϨϯμʔπϦʔ͕࠶ධՁ͞Ε࠶ܭࢉ͢ΔॴͰ͢ • ཁૉʹḪͬͯ࠶ܭࢉ͢ΔͨΊɺύϑΥʔϚϯεʹ Өڹ͕ग़͍͢ ࠓճReflowͱݺͼਐΊ·͢
Paint • LayoutΑΓ͍͕ɺΓෛՙ͕ߴ͍ • Repaintͱ࠶ܭࢉ͞ΕͨϨϯμʔπϦʔͷ݁ՌΛݩʹ εΫϦʔϯΛߋ৽͢Δ͜ͱΛݴ͍·͢ • GPUϨϯμϦϯάΛ͏͜ͱʹΑΓɺൃੜΛ͑Δ͜ͱ͕Մೳ ΞχϝʔγϣϯͰtransform, opacityͳͲΛ༻͢Δ
• ҎԼͷϓϩύςΟ͕ओʹෛՙ͕ߴ͍ྫͰ͢ - box-shadow - border-radius - background - filter: blur - gradient - position:fixed
Reflow / Repaint Reflow Repaint ϨϯμʔπϦʔ͕࣋ͭ DOMཁૉΛ࠶ܭࢉ͢Δ εΫϦʔϯͷ ࠶ඳըॲཧΛ͢Δ
ൃੜτϦΨʔ ReFlow + RePaint RePaintͷΈ DOM NodeͷՃɾߋ৽ɾআ windowͷαΠζมߋɾεΫϩʔϧ ϑΥϯταΠζͷมߋ Ξχϝʔγϣϯ
ελΠϧଐੑͷՃɾมߋɾআ ίϯςΩετͷมߋ offsetWidth, offsetHeightͷ࠶ܭࢉ cssٖࣅΫϥεͷૢ࡞ css#color css#outline css#visibility: hidden css#backgroundColor
const style = document.body.style; // reflow + repaint style.border =
'1px solid #333'; style.padding = '10px'; style.fontSize = '1px'; document.body.appendChild(document.createTextNode('hoge!')); // repaint style.color = 'blue'; style.backgroundColor = '#0ff';
ൃੜΛ࠷খݶʹ͑Δ • styleͰͷมߋΛආ͚Δ • documentFragmentΛ͏
styleͰͷมߋΛආ͚Δ • DOMͷมߋճΛ1ճʹ ·ͱΊΔ • display: noneͰӅ͠มߋ(n ճ)ͤ͞displayΛ͢ (nճ ͷreflow/repaintʹର͠ɺ
͜ͷํ๏ͩͱ2ճͰࡁΉ) // js const el = document.body; const style = el.style; // bad style.left = '10px'; // reflow, repaint style.top = '20px'; // reflow, repaint // good el.classList.add("anotherclass"); // reflow, repaint // .css .anotherclass { left: 10px; top: 20px; }
ϒϥβͷΈ • ReFlow/RePaintෛՙ͕ߴ͍ͨΊɺ ϒϥβࣗମ͕࠷దԽΛߦ͍·͢ • ϒϥβJavaScript͔ΒͷstyleมߋΛΩϡʔʹ٧Ίɺ·ͱΊͯ ࠷ޙʹॲཧΛߦ͏͜ͱʹΑΓReflow/RepaintΛ࠷খݶʹ͑·͢ function updateBodyStyle() {
const style = document.body.style; style.top = '50px'; style.left = '30px'; style.right = '40px'; style.bottom = '20px'; } 4ճมߋΛߦ͍ͬͯΔ͕ Reflow/Repaint1ճ͔͠ൃੜ͠ͳ͍
ReFlowͷ࠷దԽΛյ͢ • ϒϥβstyleΛΩϡʔʹ٧ΊɺҰఆ࣌ؒܦ͔ͭมߋճͰΩϡʔΛ ϑϥογϡ͠·͢ • ҎԼͷελΠϧΛಡΈࠐΉͱڧ੍తʹϑϥογϡ͢Δ͜ͱ͕ՄೳͰ͢ - offsetTop/Left/Width/Height - scrollTop/Left/Width/Height
- clientTop/Left/Width/Height - getComputedStyle() - getClientRect() - scrollBy(), scrollTo() - scrollX, scrollY - height, width const div = document.querySelector('div'); for (let i = 0; i < 100; i++) { div.style.left = div.offsetLeft + 50 + 'px'; } ѱ͍ྫ ϧʔϓ֎ͰΩϟογϡ͢Δ͖
documentFragmentΛ͏ • documentFragmentΛ͍ɺෳͷมߋΛ ·ͱΊϨϯμʔπϦʔʹՃ͢Δ͜ͱʹΑΓ ReflowΛҰճʹ͑·͢ https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment
chromeͰ֬ೝ͢Δํ๏ Rendering Timeline/Paint Profiler
·ͱΊ • ReFlowͱRePaintͷଟൃΛؾʹ͢ΔΑ͏ʹ͠Α͏ • ൃੜτϦΨʔʹͳΔJavaScriptʹؾΛ͚ͭΑ͏ • ΞχϝʔγϣϯCSS transformΛ͓͏
ࢀߟจݙ • https://www.html5rocks.com/ja/tutorials/ internals/howbrowserswork/ • http://rochas.cc/blog/2013/12/09/ frontrend.html • https://gist.github.com/paulirish/ 5d52fb081b3570c81e3a