Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fizz] Implement lazy components and nodes #21355

Merged
merged 2 commits into from Apr 27, 2021

Conversation

sebmarkbage
Copy link
Collaborator

Implements React.lazy either in the component type position (the officially supported use case) and the node position (used by Flight).

This allows code on the server to be async loaded. It doesn't actually transfer any hints about what chunks you might want to eagerly preload like what react-loadable does. That's something you get for free with Server Components but not plain lazy.

This is used by Flight to encode not yet resolved nodes of any kind.
@facebook-github-bot facebook-github-bot added CLA Signed React Core Team Opened by a member of the React Core Team labels Apr 27, 2021
@sebmarkbage
Copy link
Collaborator Author

Notably this doesn't call checkPropTypes on the resolved thing. The existing partial renderer doesn't do that neither for memo, lazy etc. The client will during hydration though.

@sizebot
Copy link

sizebot commented Apr 27, 2021

Comparing: 7212383...2626e3e

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.min.js = 122.76 kB 122.76 kB = 39.42 kB 39.42 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js = 129.34 kB 129.34 kB = 41.51 kB 41.51 kB
facebook-www/ReactDOM-prod.classic.js = 412.52 kB 412.52 kB = 76.35 kB 76.35 kB
facebook-www/ReactDOM-prod.modern.js = 400.55 kB 400.55 kB = 74.45 kB 74.45 kB
facebook-www/ReactDOMForked-prod.classic.js = 412.52 kB 412.52 kB = 76.35 kB 76.35 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
facebook-www/ReactDOMServer-prod.modern.js +0.52% 71.35 kB 71.71 kB +0.43% 14.76 kB 14.82 kB
oss-experimental/react-server/cjs/react-server.development.js +0.41% 110.86 kB 111.31 kB +0.29% 27.55 kB 27.63 kB
oss-experimental/react-server/cjs/react-server.production.min.js +0.34% 17.23 kB 17.29 kB +0.12% 5.93 kB 5.93 kB
oss-experimental/react-dom/umd/react-dom-unstable-fizz.browser.development.js +0.22% 218.75 kB 219.23 kB +0.17% 50.75 kB 50.84 kB
oss-experimental/react-dom/cjs/react-dom-unstable-fizz.node.development.js +0.22% 208.17 kB 208.62 kB +0.16% 50.11 kB 50.19 kB
oss-experimental/react-dom/cjs/react-dom-unstable-fizz.browser.development.js +0.22% 208.22 kB 208.68 kB +0.16% 50.22 kB 50.30 kB
facebook-www/ReactDOMServer-dev.modern.js +0.21% 202.07 kB 202.50 kB +0.15% 47.57 kB 47.64 kB

Generated by 🚫 dangerJS against 2626e3e

@sebmarkbage sebmarkbage merged commit bd4f056 into facebook:master Apr 27, 2021
facebook-github-bot pushed a commit to facebook/react-native that referenced this pull request Apr 28, 2021
Summary:
This sync includes the following changes:
- **[9a2591681](facebook/react@9a2591681 )**: Fix export //<Sebastian Markbage>//
- **[4a8deb083](facebook/react@4a8deb083 )**: Switch the isPrimaryRender flag based on the stream config ([#21357](facebook/react#21357)) //<Sebastian Markbåge>//
- **[bd4f056a3](facebook/react@bd4f056a3 )**: [Fizz] Implement lazy components and nodes ([#21355](facebook/react#21355)) //<Sebastian Markbåge>//
- **[fc33f12bd](facebook/react@fc33f12bd )**: Remove unstable scheduler/tracing API ([#20037](facebook/react#20037)) //<Brian Vaughn>//
- **[721238394](facebook/react@721238394 )**: Enable strict effects mode for React Native Facebook builds ([#21354](facebook/react#21354)) //<Brian Vaughn>//
- **[48740429b](facebook/react@48740429b )**: Expiration: Do nothing except disable time slicing ([#21345](facebook/react#21345)) //<Andrew Clark>//
- **[0f5ebf366](facebook/react@0f5ebf366 )**: Delete unreferenced type ([#21343](facebook/react#21343)) //<Andrew Clark>//
- **[9cd52b27f](facebook/react@9cd52b27f )**: Restore context after an error happens ([#21341](facebook/react#21341)) //<Sebastian Markbåge>//
- **[ad091759a](facebook/react@ad091759a )**: Revert "Emit reactroot attribute on the first element we discover ([#21154](facebook/react#21154))" ([#21340](facebook/react#21340)) //<Sebastian Markbåge>//
- **[709f94841](facebook/react@709f94841 )**: [Fizz] Add FB specific streaming API and build ([#21337](facebook/react#21337)) //<Sebastian Markbåge>//
- **[e8cdce40d](facebook/react@e8cdce40d )**: Don't flush sync at end of discreteUpdates ([#21327](facebook/react#21327)) //<Andrew Clark>//
- **[a15586001](facebook/react@a15586001 )**: Fix: Don't flush discrete at end of batchedUpdates ([#21229](facebook/react#21229)) //<Andrew Clark>//
- **[89847bf6e](facebook/react@89847bf6e )**: Continuous updates should interrupt transitions ([#21323](facebook/react#21323)) //<Andrew Clark>//
- **[ef37d55b6](facebook/react@ef37d55b6 )**: Use performConcurrentWorkOnRoot for "sync default" ([#21322](facebook/react#21322)) //<Andrew Clark>//

Changelog:
[General][Changed] - React Native sync for revisions a632f7d...2a7bb41

jest_e2e[run_all_tests]

Reviewed By: JoshuaGross

Differential Revision: D28063006

fbshipit-source-id: 7e3535f80961706863b6c2188ee44b5796b2f000
koto pushed a commit to koto/react that referenced this pull request Jun 15, 2021
* Implement lazy components

* Implement lazy elements / nodes

This is used by Flight to encode not yet resolved nodes of any kind.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed React Core Team Opened by a member of the React Core Team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants