BEST OPTIMISATION TECHNIQUES IN

nik72619c

@niksharma1997

https://medium.com/@nikhilsharmarockstar21/
AGENDA
Lazy Loading ,Code Splitting and profiling
Virtualization with windowing
Removing un-necessary re-renders
React's Reconciliation

RENDER WHAT THE USER NEEDS
SHIP WHAT'S REQUIRED



WHY CARE ?

LAZY LOADING
&
CODE SPLITTING
WHAT WE THINK
REALITY




YUP...IT IS

WHY CARE ??


If the markup contains an external JavaScript file, the browser stops loading the HTML and starts downloading that external JavaScript – render blocking or parser blocking
The render block also causes Resource blocking, when the external JavaScript files blocks other resources like markup, media etc. from downloading into the web browser.

1. Dynamically load component using React.lazy()
2. USE SUSPENSE TO ADD A FALLBACK TILL THE TIME THE COMPONENT RENDERS
3. CHECK THE NETWORKS TAB AND BOOM !


PROFILING WITH REACT DEVTOOLS
ACCESS THE VIRTUAL DOM ELEGENTLY...
FIND THE CULPRITE WITH ...

INTERACTIONS
THE RENDER INSPECTOR
TRACK USER EVENTS AND DETERMINE WHAT CAUSED THE RENDER

LETS GET THIS STRAIGHT...

AGENDA
Lazy Loading ,Code Splitting and profiling
Virtualization with windowing
Removing un-necessary re-renders
React's Reconciliation

WINDOWING

WHY????

Real life Applications usually render complex components
impact on DOM performance
The lesser work you do...
- Blazing fast initial renders
- Boosted frame rate





<A SIMPLE EXAMPLE.../>

GETTING THERE....






WHAT ABOUT VARIABLE LISTS ?


AGENDA
Lazy Loading ,Code Splitting and profiling
Virtualization with windowing
Removing un-necessary re-renders
React's Reconciliation


THE MAGIC OF shouldComponentUpdate
WHY ??
React keeps in memory two versions of the DOM:
- the version of the DOM currently displayed
- the next version of the DOM to be displayed
}
RECONCILIATION
CHANGE IN PARENT ==> CHANGE IN THE ENTIRE SUBTREE
SOLUTION ?
shouldComponentUpdate
render acc to prop/state changes
HOW IT WORKS?
<A SIMPLE EXAMPLE/>
PURE COMPONENTS
Cousin of shouldComponentUpdate
implements shouldComponentUpdate

export default class Mycomponent extends React.PureComponent{
//your regular code
}

LETS SEE THIS IN ACTION...
WHEN to use it ??
- Pure components are shallow comparers
- Compare object refs rather than values
DONT USE IT FOR NESTED STRUCTURES


Pure components vs shouldComponentUpdate
"WAIT...WE HAVE shouldComponentUpdate"
DEEP COMPARE IS EXPENSIVE

SO BE WISE...STAY SAFE !
SUMMING IT UP...
Pure Components
simple state and props
SCU
complex data structure
shallow compare
deep compare
GOT IT....BUT ABOUT FUNCTIONAL COMPONENTS


REACT.MEMO()
HOC, FOR MEMOISING FUNCTIONAL COMPONENTS

AND ITS PRETTY SIMPLE
BUT I MISS shouldComponentUpdate !


NO WORRIES ...


AGENDA
Lazy Loading ,Code Splitting and profiling
Virtualization with windowing
Removing un-necessary re-renders
React's Reconciliation



RECONCILIATION
REACT's SECRET INGREDIENT!
React's render() returns a new VirtualDOM on prop/state change
state of the art algos=> O(n^3)
MOTIVATION

REACT'S SECRET
DOM Elements Of The Same Type
Elements Of Different Types
Component Elements Of The Same Type


componentWillReceiveProps() and componentWillUpdate()
RECURSING ON CHILDREN

WHAT'S THE POINT ??




VS

REACT'S RECONCIALIATION IDENTIFIES THE CHILDREN BASED ON THE KEY PROP

WHAT CAUSES EXCESS RECONCILIATIONS?
HOW TO REMOVE IT?


"WHAT ELSE?"
-
SCU
-
Pure components
-
React.memo()
AGENDA
Lazy Loading ,Code Splitting and profiling
Virtualization with windowing
Removing un-necessary re-renders
React's Reconciliation





BOOM ! NOW ITS FAST

SOME GREAT SOURCES





FIND THE CODE AT:-
}
https://github.com/nik72619c/Facebook-Dev-Circles-Talk
https://codesandbox.io/s/nnqmmmz1o0
https://github.com/nik72619c/Optimise_Rerenders_Facebook_DevC
OPTIMISE YOUR APPS TODAY !
THANK YOU



react-optimisation-FBDevC
By nik72619c
react-optimisation-FBDevC
- 609