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

  • 989