This Presentation carries information on
1. How Does Animation work?
2. How does Browser render?
3. How Browser identifies when to batch layouts?
4. How we traverse Tree to Batch Write operation?
5. How we traverse Across Frames by converting recursion to Iteration?
6. Small Prototype Code - on How React would have implemented?
7. Prototype Code Walkthrough.
While Explaining React Internals
Note: The slide is broken down into multiple slides to provide an animated feel. Hence 200 slides.
46. JS
Style Layout Paint
Composite
HTML Parser
How Browser constructs ?
When do we see visual Changes?
Visual change: When we modify object (DOM Tree) in JavaScript
47. JS
Style Layout Paint
Composite
HTML Parser
How Browser constructs ?
When do we see visual Changes?
Visual change: When we modify object (DOM Tree) in JavaScript
1. “layout” property: width, height , its position with left or top.
48. JS
Style Layout Paint
Composite
HTML Parser
How Browser constructs ?
When do we see visual Changes?
Visual change: When we modify object (DOM Tree) in JavaScript
1. “layout” property: width, height , its position with left or top.
2. “paint” property: background image, text color, shadows.
49. JS
Style Layout Paint
Composite
HTML Parser
1. Traverse Object (Render Tree)
2. Find all Dirty Changes
3. Batch all these changes at once in one commit
Browser Immediate Layouts
Browser Batch Layouts
1. Font Size change
2. Browser Resize
How Browser Updates ?
56. JS
Style Layout Paint
Composite
HTML Parser
Read
Read
Write
WriteRead - Write
Read - Write
How Browser Updates ?
How can we help Browser Batching?
57. JS
Style Layout Paint
Composite
HTML Parser
Read
Write
Write
ReadRead - Read
Write - Write
How Browser Updates ?
How can we help Browser Batching ? Batch Write
58. JS
Style Layout Paint
Composite
HTML Parser
Read
Write
Write
ReadRead - Read
Write - Write
Layout
Calculations = 1
How Browser Updates ?
How can we help Browser Batching ? Batch Write
88. JS
Style Layout Paint
Composite
HTML Parser
Request Idle
Callbacks
Request
AnimationFrame
Callbacks
Traversal
Across Frames => Break Traversal => Run in Idle Time
89. root child1 child2 child3 gchild1 gChild2
Traversal
Across Frames => Break Traversal => How ?
90. root child1 child2 child3 gchild1 gChild2
Traversal
Across Frames => Break Traversal => How ?
Recursion => Iteration
91. root child1 child2 child3 gchild1 gChild2
Traversal
Across Frames => Break Traversal => How ?
92. root child1 child2 child3 gchild1 gChild2
Traversal
Across Frames => Break Traversal => How ?
93. root child1 child2 child3 gchild1 gChild2
Traversal
Across Frames => Break Traversal => How ? => Reference to Traverse Back
94. root child1 child2 child3 gchild1 gChild2
Traversal
Across Frames => Break Traversal => How ? => Reference to Parent
121. Build Tree | Traversal | Update
Abstract => React
1. Build Linked List for Iteration
2. Traverse Node in Idle Time across frames
3. Collect Changes from Virtual DOM
4. Commit to DOM Tree in Single Frame
122. 1. Build Linked List for Iteration
2. Traverse Node in Idle Time across frames
3. Collect Changes from Virtual DOM
4. Commit to DOM Tree in Single Frame
Build Tree | Traversal | Update
Abstract => React => React Component => Life Cycle Methods | Hooks
123. 1. Build Linked List for Iteration
2. Traverse Node in Idle Time across frames
3. Collect Changes from Virtual DOM
4. Commit to DOM Tree in Single Frame
5. React Component Wrapped in Fiber Node
Build Tree | Traversal | Update
Abstract => React => React Component => Life Cycle Methods | Hooks
193. Minimum Operations 0(n3)
Update
Insert | delete => reorder
1
app
list
item
item
button
4
React implements a heuristic O(n) algorithm based on
two assumptions:
1. Two elements of different types will
produce different trees.
2.Render children with a key prop.
195. Render Tree (Render Engine)
|
API
|
DOM Tree (JS Engine)
|
API
|
Virtual DOM Tree (JS Framework - React)
196. Render Tree (Render Engine)
|
API
|
DOM Tree (JS Engine)
|
API
|
Virtual DOM Tree (JS Framework - React)
Build Link List: Render()
State changes: setState | useState
sideEffect: ComponentDidMount | useEffect
197. Render Tree (Render Engine)
|
API
|
DOM Tree (JS Engine)
|
API
|
Virtual DOM Tree (JS Framework - React)
Build Link List: Render()
State changes: setState | useState
sideEffect: ComponentDidMount | useEffect
198. Render Tree (Render Engine)
|
API
|
DOM Tree (JS Engine)
|
API
|
Virtual DOM Tree (JS Framework - React)
Build Link List: Render()
State changes: setState | useState
sideEffect: ComponentDidMount | useEffect