8000 [Flight] Defer Elements if the parent chunk is too large by sebmarkbage · Pull Request #33030 · facebook/react · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

[Flight] Defer Elements if the parent chunk is too large #33030

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

8000
Merged
merged 3 commits into from
Apr 30, 2025

Conversation

sebmarkbage
Copy link
Collaborator
@sebmarkbage sebmarkbage commented Apr 25, 2025

Same principle as #33029 but for Flight.

We pretty aggressively create separate rows for things in Flight (every Server Component that's an async function create a microtask). However, sync Server Components and just plain Host Components are not. Plus we should ideally ideally inline more of the async ones in the same way Fizz does.

This means that we can create rows that end up very large. Especially if all the data is already available. We can't show the parent content until the whole thing loads on the client.

We don't really know where Suspense boundaries are for Flight but any Element is potentially a point that can be split.

This heuristic counts roughly how much we've serialized to block the current chunk and once a limit is exceeded, we start deferring all Elements. That way they get outlined into future chunks that are later in the stream. Since they get replaced by Lazy references the parent can potentially get unblocked.

This can help if you're trying to stream a very large document with a client nav for example.

Including any outlined chunks that would go before th
8000
is row since they also
block it.

The size doesn't include every single byte written like every bracket and
number. It's just the big picture scale like string lengths including keys.
…y objects

eligible to be a lazy reference (other lazy references and elements).

This allows these to stream in on the client.

We ping these instead of retrying them, which places them after the currently
running task in the stream.
@react-sizebot
Copy link
react-sizebot commented Apr 25, 2025

Comparing: 8e9a5fc...54104be

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.js = 6.68 kB 6.68 kB = 1.83 kB 1.83 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 527.72 kB 527.72 kB = 93.07 kB 93.07 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.69 kB 6.69 kB = 1.83 kB 1.83 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 633.34 kB 633.34 kB = 111.25 kB 111.25 kB
facebook-www/ReactDOM-prod.classic.js = 671.13 kB 671.13 kB = 117.70 kB 117.70 kB
facebook-www/ReactDOM-prod.modern.js = 661.41 kB 661.41 kB = 116.14 kB 116.14 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable-semver/react-server/cjs/react-server-flight.development.js +0.54% 100.72 kB 101.26 kB +0.71% 18.71 kB 18.84 kB
oss-stable/react-server/cjs/react-server-flight.development.js +0.54% 100.72 kB 101.26 kB +0.71% 18.71 kB 18.84 kB
oss-experimental/react-server/cjs/react-server-flight.production.js +0.53% 62.91 kB 63.24 kB +0.30% 12.52 kB 12.56 kB
oss-stable-semver/react-server/cjs/react-server-flight.production.js +0.50% 57.95 kB 58.24 kB +0.28% 11.65 kB 11.68 kB
oss-stable/react-server/cjs/react-server-flight.production.js +0.50% 57.95 kB 58.24 kB +0.28% 11.65 kB 11.68 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +0.42% 107.64 kB 108.09 kB +0.48% 19.94 kB 20.04 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.39% 139.60 kB 140.15 kB +0.49% 25.94 kB 26.07 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.39% 139.60 kB 140.15 kB +0.49% 25.94 kB 26.07 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.38% 143.43 kB 143.97 kB +0.49% 26.56 kB 26.69 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.38% 143.43 kB 143.97 kB +0.49% 26.56 kB 26.69 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.38% 144.01 kB 144.56 kB +0.51% 26.83 kB 26.97 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.38% 144.01 kB 144.56 kB +0.51% 26.83 kB 26.97 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.38% 144.03 kB 144.58 kB +0.52% 26.80 kB 26.94 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.38% 144.03 kB 144.58 kB +0.52% 26.80 kB 26.94 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.37% 147.34 kB 147.89 kB +0.47% 27.25 kB 27.38 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.37% 147.34 kB 147.89 kB +0.47% 27.25 kB 27.38 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.37% 147.88 kB 148.43 kB +0.47% 27.38 kB 27.51 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.37% 147.88 kB 148.43 kB +0.47% 27.38 kB 27.51 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.36% 150.70 kB 151.25 kB +0.55% 27.86 kB 28.01 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.36% 150.70 kB 151.25 kB +0.55% 27.86 kB 28.01 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.36% 151.18 kB 151.72 kB +0.46% 27.88 kB 28.01 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.36% 151.18 kB 151.72 kB +0.46% 27.88 kB 28.01 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.36% 151.20 kB 151.75 kB +0.45% 27.87 kB 28.00 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.36% 151.20 kB 151.75 kB +0.45% 27.87 kB 28.00 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.36% 151.84 kB 152.39 kB +0.58% 28.12 kB 28.28 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.36% 151.84 kB 152.39 kB +0.58% 28.12 kB 28.28 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.36% 151.91 kB 152.45 kB +0.58% 28.13 kB 28.30 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.36% 151.91 kB 152.45 kB +0.58% 28.13 kB 28.30 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js +0.31% 90.97 kB 91.26 kB +0.25% 18.75 kB 18.80 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js +0.31% 92.50 kB 92.78 kB +0.23% 19.08 kB 19.13 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.31% 146.54 kB 146.99 kB +0.40% 27.14 kB 27.25 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +0.30% 94.39 kB 94.68 kB +0.22% 19.49 kB 19.53 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.production.js +0.30% 94.42 kB 94.71 kB +0.21% 19.51 kB 19.55 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.30% 151.00 kB 151.45 kB +0.37% 27.87 kB 27.98 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.30% 151.24 kB 151.69 kB +0.43% 28.10 kB 28.23 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.30% 151.27 kB 151.72 kB +0.46% 28.11 kB 28.24 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +0.29% 97.88 kB 98.17 kB +0.24% 19.88 kB 19.92 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.29% 154.28 kB 154.73 kB +0.42% 28.49 kB 28.61 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +0.29% 98.30 kB 98.59 kB +0.22% 20.03 kB 20.08 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.29% 154.82 kB 155.27 kB +0.40% 28.63 kB 28.74 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +0.29% 99.41 kB 99.70 kB +0.24% 20.30 kB 20.35 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +0.29% 99.43 kB 99.72 kB +0.23% 20.29 kB 20.34 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.production.js +0.28% 100.36 kB 100.65 kB +0.23% 20.43 kB 20.48 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.28% 157.94 kB 158.39 kB +0.40% 29.19 kB 29.31 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.28% 158.75 kB 159.20 kB +0.37% 29.25 kB 29.36 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.28% 158.78 kB 159.23 kB +0.37% 29.24 kB 29.35 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.28% 159.08 kB 159.53 kB +0.38% 29.48 kB 29.59 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +0.28% 101.36 kB 101.65 kB = 20.71 kB 20.70 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.28% 159.14 kB 159.59 kB +0.40% 29.49 kB 29.61 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +0.28% 101.42 kB 101.70 kB +0.21% 20.72 kB 20.76 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js +0.28% 86.41 kB 86.66 kB +0.17% 18.01 kB 18.04 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js +0.28% 86.41 kB 86.66 kB +0.17% 18.01 kB 18.04 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js +0.28% 87.86 kB 88.10 kB +0.15% 18.33 kB 18.35 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js +0.28% 87.86 kB 88.10 kB +0.15% 18.33 kB 18.35 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +0.27% 89.88 kB 90.12 kB +0.20% 18.74 kB 18.78 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +0.27% 89.88 kB 90.12 kB +0.20% 18.74 kB 18.78 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.production.js +0.27% 89.91 kB 90.15 kB +0.21% 18.75 kB 18.79 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.production.js +0.27% 89.91 kB 90.15 kB +0.21% 18.75 kB 18.79 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +0.26% 93.33 kB 93.57 kB +0.14% 19.11 kB 19.14 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +0.26% 93.33 kB 93.57 kB +0.14% 19.11 kB 19.14 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +0.26% 93.74 kB 93.99 kB +0.14% 19.22 kB 19.25 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +0.26% 93.74 kB 93.99 kB +0.14% 19.22 kB 19.25 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +0.26% 94.77 kB 95.01 kB +0.16% 19.45 kB 19.48 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +0.26% 94.77 kB 95.01 kB +0.16% 19.45 kB 19.48 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +0.26% 94.79 kB 95.03 kB +0.14% 19.44 kB 19.47 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +0.26% 94.79 kB 95.03 kB +0.14% 19.44 kB 19.47 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.production.js +0.25% 95.85 kB 96.09 kB +0.17% 19.69 kB 19.72 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.production.js +0.25% 95.85 kB 96.09 kB +0.17% 19.69 kB 19.72 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +0.25% 96.85 kB 97.09 kB +0.15% 19.90 kB 19.93 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +0.25% 96.85 kB 97.09 kB +0.15% 19.90 kB 19.93 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +0.25% 96.90 kB 97.15 kB +0.16% 19.91 kB 19.94 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +0.25% 96.90 kB 97.15 kB +0.16% 19.91 kB 19.94 kB

Generated by 🚫 dangerJS against 54104be

@sebmarkbage sebmarkbage merged commit 49ea8bf into facebook:main Apr 30, 2025
239 checks passed
github-actions bot pushed a commit that referenced this pull request Apr 30, 2025
Same principle as #33029 but for Flight.

We pretty aggressively create separate rows for things in Flight (every
Server Component that's an async function create a microtask). However,
sync Server Components and just plain Host Components are not. Plus we
should ideally ideally inline more of the async ones in the same way
Fizz does.

This means that we can create rows that end up very large. Especially if
all the data is already available. We can't show the parent content
until the whole thing loads on the client.

We don't really know where Suspense boundaries are for Flight but any
Element is potentially a point that can be split.

This heuristic counts roughly how much we've serialized to block the
current chunk and once a limit is exceeded, we start deferring all
Elements. That way they get outlined into future chunks that are later
in the stream. Since they get replaced by Lazy references the parent can
potentially get unblocked.

This can help if you're trying to stream a very large document with a
client nav for example.

DiffTrain build for [49ea8bf](49ea8bf)
github-actions bot pushed a commit to code/lib-react that referenced this pull request Apr 30, 2025
)

Same principle as facebook#33029 but for Flight.

We pretty aggressively create separate rows for things in Flight (every
Server Component that's an async function create a microtask). However,
sync Server Components and just plain Host Components are not. Plus we
should ideally ideally inline more of the async ones in the same way
Fizz does.

This means that we can create rows that end up very large. Especially if
all the data is already available. We can't show the parent content
until the whole thing loads on the client.

We don't really know where Suspense boundaries are for Flight but any
Element is potentially a point that can be split.

This heuristic counts roughly how much we've serialized to block the
current chunk and once a limit is exceeded, we start deferring all
Elements. That way they get outlined into future chunks that are later
in the stream. Since they get replaced by Lazy references the parent can
potentially get unblocked.

This can help if you're trying to stream a very large document with a
client nav for example.

DiffTrain build for [49ea8bf](facebook@49ea8bf)
github-actions bot pushed a commit to code/lib-react that referenced this pull request Apr 30, 2025
)

Same principle as facebook#33029 but for Flight.

We pretty aggressively create separate rows for things in Flight (every
Server Component that's an async function create a microtask). However,
sync Server Components and just plain Host Components are not. Plus we
should ideally ideally inline more of the async ones in the same way
Fizz does.

This means that we can create rows that end up very large. Especially if
all the data is already available. We can't show the parent content
until the whole thing loads on the client.

We don't really know where Suspense boundaries are for Flight but any
Element is potentially a point that can be split.

This heuristic counts roughly how much we've serialized to block the
current chunk and once a limit is exceeded, we start deferring all
Elements. That way they get outlined into future chunks that are later
in the stream. Since they get replaced by Lazy references the parent can
potentially get unblocked.

This can help if you're trying to stream a very large document with a
client nav for example.

DiffTrain build for [49ea8bf](facebook@49ea8bf)
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.

4 participants
0