Slide 1

Slide 1 text

5JNF4MJDJOHBOE4VTQFOTF 3FBDU+45PLZP+VOF !LPCB

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

3FDBQ3FBDU'JCFS

Slide 4

Slide 4 text

w 3FBDU'JCFSJTBOVOJUPGXPSL 㲈3FBDU&MFNFOU w *UJTQPTTJCMFUPTUPQBOESFTVNFVQEBUFT 3FDBQ3FBDU'JCFS FiberA FiberB FiberD FiberE Commit all SideEffects Idle Time Idle Time Idle Time SideEffect SideEffect Host (DOM) FiberC Render Phase Commit Phase

Slide 5

Slide 5 text

w 3FOEFS1IBTFʜ"TZOD w $PNNJU1IBTFʜ4ZOD 3FDBQ3FBDU'JCFS FiberA FiberB FiberD FiberE Commit all SideEffects Idle Time Idle Time Idle Time SideEffect SideEffect Host (DOM) FiberC Async Sync

Slide 6

Slide 6 text

FiberC 4VTQFOEBOE3FTVNF FiberA FiberB FiberA FiberC Commit Low Priority High Priority Commit FiberA FiberB FiberC Low Priority Reuse Interrupt Suspend Resume

Slide 7

Slide 7 text

5JNF4MJDJOH

Slide 8

Slide 8 text

w #MPDLJOH6*UISFBEJTBOBXGVMFYQFSJFODF w 5IFSFBSFNBOZQFPQMFXIPVTFMPXQPXFSEFWJDFT w %FCPVODJOHBOEUISPUUMJOHBSFGPSMPXQPXFSEFWJDFT 5JNF4MJDJOH { this.setState({value}); requestAnimationFrame(() => this.setState({data: this.filterData(value)}) ); }}

Slide 9

Slide 9 text

https://github.com/facebook/react/blob/master/packages/react-dom/src/events/SimpleEventPlugin.js

Slide 10

Slide 10 text

https://react-timeslicing-demo.netlify.com/ Low Priority High Priority

Slide 11

Slide 11 text

Schedule by React Scheduler

Slide 12

Slide 12 text

https://github.com/facebook/react/commit/1e3cd332a015e312149efa36eb81c7523411cc2d#diff- bbebc3357e1fb99ab13ad796e04b69a6

Slide 13

Slide 13 text

%FNP IUUQTSFBDUUJNFTMJDJOHEFNPOFUMJGZDPN IUUQTHJUIVCDPNLPCBSFBDUUJNFTMJDJOHEFNP

Slide 14

Slide 14 text

4VTQFOTF

Slide 15

Slide 15 text

8IBUJT4VTQFOTF

Slide 16

Slide 16 text

https://reactjs.org/blog/2018/03/01/sneak-peek-beyond-react-16.html

Slide 17

Slide 17 text

w 4VTQFOTFJTBGFBUVSFUPIBOEMFBTZODVQEBUFT w )5513FRVFTU w %ZOBNJDJNQPSU w 1SPNJTFBTBQSJNJUJWF w )BOEMJOHBTZODISPOPVTVQEBUFTBSFTPIBSEʜ w 4UBSU-PBEJOH "1*4VDDFTT 'BJMVSFʜ w .BOZMPBEJOHTQJOOFST KBOL6*CZGBTUSFTQPOTFT 4VTQFOTF

Slide 18

Slide 18 text

w /P w 4VQQPSUJOH1SPNJTF$PNQPOFOUEPFTO`UTPMWFQSPCMFNT w )PXEPZPVMJGUVQEFQFOEFODJFTPG1SPNJTF$PNQPOFOUT JOBODFTUPST *T4VTQFOTFTVQQPSUJOH1SPNJTF$PNQPOFOU // How do you show loading message // until the user list has been fetched? {isLoading ? : }

Slide 19

Slide 19 text

)PXEPFT4VTQFOTFXPSL

Slide 20

Slide 20 text

w 4VTQFOTFJTCBTFEPO&SSPS#PVOEBSJFT UIPVHIXIJDI UISPXT1SPNJTFJOTUFBEPG&SSPS )PXEPFT4VTQFOTFXPSL User Fallback Timeout throw Promise! (suspend) timeout render with fetched Data (resume)

Slide 21

Slide 21 text

4JNQMF$BDIF1SPWJEFS

Slide 22

Slide 22 text

https://github.com/facebook/react/tree/master/packages/simple-cache-provider

Slide 23

Slide 23 text

Empty Pending Resolved Rejected read or preload throw promise return value from cache Cache load

Slide 24

Slide 24 text

)PXUPVTF4VTQFOTF

Slide 25

Slide 25 text

4VTQFOTF "1*XJMMCFDIBOHFE import SimpleCacheProvider from ‘simple-cache-provider’; const cache = SimpleCacheProvider.createCache(); const userFetcher = id => SimpleCacheProvider.createResource(id => fetch(`/api/users/${id}`).then(res => res.json()); )(cache, id); const User = props => { const user = userFetcher.read(props.id); return
{user.name}
; }; const Placeholder = props => ( {didExpire => didExpire ? props.fallback : props.children} );

Slide 26

Slide 26 text

4VTQFOTF "1*XJMMCFDIBOHFE import SimpleCacheProvider from ‘simple-cache-provider’; const cache = SimpleCacheProvider.createCache(); const routeFetcher = Component => SimpleCacheProvider.createResource(Component => import(Component).then(module => module.default); )(cache, Component); const UserPage = () => { const Component = routeFetcher.read(‘./pages/User’); return ; }; const Placeholder = props => ( {didExpire => didExpire ? props.fallback : props.children} );

Slide 27

Slide 27 text

%FNP IUUQTSFBDUTVTQFOTFEFNPOFUMJGZDPN IUUQTHJUIVCDPNLPCBSFBDUTVTQFOTFEFNP

Slide 28

Slide 28 text

w 4VTQFOTFXJMMCFBWBJMBCMFJOWCZEFGBVMU w 5IFpOBM"1*NJHIUCFDIBOHFE w :PVDBOFYQFSJNFOUJUXJUIBDBOBSZWFSTJPO 4VTQFOTF $ npm install react@canary react-dom@canary simple-cache-provider

Slide 29

Slide 29 text

5IBOLZPV TQFBLFSEFDLDPNLPCB