Skip to content

[Flight] Ref Count Debug Chunks Separately and Send Separate Main Channel Close Signal #33716

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

Closed
wants to merge 2 commits into from

Conversation

sebmarkbage
Copy link
Collaborator

When we keep the original stream open for additional debug information, we need to know when the primary content is done. This emits a separate command for that.

Once we have two separate channels that will just be a close of each channel.

For now this is only used to flush the performance track (it waits until the end to know the end time of the root component). In a follow up this will be used to inform GC.

@sebmarkbage sebmarkbage requested a review from unstubbable July 7, 2025 01:44
@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label Jul 7, 2025
@react-sizebot
Copy link

Comparing: 9a645e1...18468a3

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 +0.05% 1.83 kB 1.83 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 530.50 kB 530.50 kB = 93.66 kB 93.66 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.69 kB 6.69 kB +0.05% 1.83 kB 1.83 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 655.04 kB 655.04 kB = 115.35 kB 115.35 kB
facebook-www/ReactDOM-prod.classic.js = 675.12 kB 675.12 kB = 118.77 kB 118.77 kB
facebook-www/ReactDOM-prod.modern.js = 665.54 kB 665.54 kB = 117.13 kB 117.13 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.production.js +0.56% 60.27 kB 60.61 kB +0.42% 12.10 kB 12.15 kB
oss-stable/react-server/cjs/react-server-flight.production.js +0.56% 60.27 kB 60.61 kB +0.42% 12.10 kB 12.15 kB
oss-experimental/react-server/cjs/react-server-flight.production.js +0.53% 65.87 kB 66.22 kB +0.33% 12.99 kB 13.03 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js +0.47% 125.26 kB 125.85 kB +0.51% 22.74 kB 22.86 kB
oss-stable/react-server/cjs/react-server-flight.development.js +0.47% 125.26 kB 125.85 kB +0.51% 22.74 kB 22.86 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.46% 171.15 kB 171.95 kB +0.51% 31.54 kB 31.70 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.46% 171.15 kB 171.95 kB +0.51% 31.54 kB 31.70 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.45% 177.12 kB 177.92 kB +0.44% 32.17 kB 32.31 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.45% 177.12 kB 177.92 kB +0.44% 32.17 kB 32.31 kB
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +0.45% 184.25 kB 185.08 kB +0.56% 41.08 kB 41.31 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.43% 183.90 kB 184.69 kB +0.42% 33.21 kB 33.35 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.43% 183.90 kB 184.69 kB +0.42% 33.21 kB 33.35 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.43% 185.05 kB 185.84 kB +0.42% 33.48 kB 33.62 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.43% 185.05 kB 185.84 kB +0.42% 33.48 kB 33.62 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.43% 185.10 kB 185.90 kB +0.41% 33.49 kB 33.63 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.43% 185.10 kB 185.90 kB +0.41% 33.49 kB 33.63 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.39% 165.77 kB 166.42 kB +0.41% 30.47 kB 30.59 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.39% 165.77 kB 166.42 kB +0.41% 30.47 kB 30.59 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.38% 169.50 kB 170.15 kB +0.37% 31.02 kB 31.13 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.38% 169.50 kB 170.15 kB +0.37% 31.02 kB 31.13 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.37% 173.55 kB 174.19 kB +0.37% 31.79 kB 31.90 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.37% 173.55 kB 174.19 kB +0.37% 31.79 kB 31.90 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.37% 174.09 kB 174.73 kB +0.34% 31.92 kB 32.03 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.37% 174.09 kB 174.73 kB +0.34% 31.92 kB 32.03 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.36% 177.31 kB 177.96 kB +0.33% 32.36 kB 32.47 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.36% 177.31 kB 177.96 kB +0.33% 32.36 kB 32.47 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.36% 177.38 kB 178.03 kB +0.33% 32.37 kB 32.48 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.36% 177.38 kB 178.03 kB +0.33% 32.37 kB 32.48 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +0.33% 150.33 kB 150.82 kB +0.27% 26.43 kB 26.50 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.30% 149.26 kB 149.71 kB +0.29% 26.80 kB 26.87 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +0.30% 150.37 kB 150.82 kB +0.27% 26.78 kB 26.85 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.30% 151.45 kB 151.90 kB +0.29% 27.18 kB 27.26 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.30% 152.00 kB 152.45 kB +0.27% 27.34 kB 27.41 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.29% 153.25 kB 153.70 kB +0.24% 27.49 kB 27.56 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.29% 154.54 kB 154.99 kB +0.26% 27.84 kB 27.91 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.29% 155.79 kB 156.24 kB +0.32% 27.92 kB 28.01 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.28% 157.63 kB 158.08 kB +0.24% 28.35 kB 28.42 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.28% 157.72 kB 158.17 kB +0.26% 28.39 kB 28.46 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.28% 158.72 kB 159.17 kB +0.24% 28.46 kB 28.53 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.28% 161.07 kB 161.52 kB +0.22% 28.70 kB 28.76 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.28% 162.40 kB 162.85 kB +0.24% 28.94 kB 29.01 kB

Generated by 🚫 dangerJS against 18468a3

@sebmarkbage
Copy link
Collaborator Author

I'm not sure this is actually sufficient for GC. Might have to do a different strategy anyway.

@sebmarkbage sebmarkbage closed this Jul 7, 2025
sebmarkbage added a commit that referenced this pull request Jul 7, 2025
Same as #33716 but without the separate close signal.

We'll need the ref count for separate debug channel anyway but I'm not
sure we'll need the separate close signal.
sebmarkbage added a commit that referenced this pull request Jul 7, 2025
…33719)

Stacked on #33718. Alternative to #33716.

The issue with flushing the Server Components track in its current form
is that we need to decide how long to wait before flushing whatever we
have. That's because the root's end time will be determined by the end
time of that last child.

However, if a child isn't actually used then we don't necessarily need
to include it in the Server Components track since it wasn't blocking
the initial render.

This waits for 100ms after the last pending chunk is resolved and if
nothing is invoking any more lazy initializers after that then we log
the Server Components track with the information we have at that point.
We also don't eagerly initialize any chunks that wasn't already
initialized so if nothing was rendered, then nothing will be logged.

This is somewhat an artifact of the current visualization. If we did
another transposed form we wouldn't necessarily need to wait until the
end and can log things as they're discovered.
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.

3 participants