Skip to content

Conversation

@sebmarkbage
Copy link
Collaborator

Stacked on #34836.

Normally we consider microtasks, next ticks and setImmediates not as I/O to be tracked by debug info. We also exclude things that finished loading before we started rendering. That's consider cached.

This avoids emitting the "RSC stream" debug info if the stream finished within a setTimeout. I.e. it was likely cached and so it wouldn't add any additional suspending.

Unfortunately, this will often happen if you use the createFromReadableStream API to consume response.body because by the time you get there you'll likely have at least received part of the body already.

@meta-cla meta-cla bot added the CLA Signed label Oct 14, 2025
@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label Oct 14, 2025
wakeChunk(resolveListeners, handler.value, initializedChunk);
} else {
if (__DEV__) {
moveDebugInfoFromChunkToInnerValue(initializedChunk, handler.value);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR surfaced another bug.

It turns out that resolveChunkDebugInfo adds a .then() listener which forces the wakeChunk pass to be taken. If that doesn't happen, then wakeChunk isn't called.

We forgot that we need to call moveDebugInfoFromChunkToInnerValue everywhere we initialize but don't call wakeChunk. We could potentially just move this out and all it next to all these instead of inside wakeChunk.

return null;
}
visited.add(node);
if (node.end >= 0 && node.end <= request.timeOrigin) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another drive-by fix somewhat related. Most of the time this is covered by the PROMISE_NODE path but it really applies to all of these so we can just apply it universally.

@react-sizebot
Copy link

react-sizebot commented Oct 14, 2025

Comparing: 19b7167...8cdc1ea

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 = 605.41 kB 605.41 kB = 107.22 kB 107.21 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 = 664.38 kB 664.38 kB = 117.09 kB 117.09 kB
facebook-www/ReactDOM-prod.classic.js = 688.25 kB 688.25 kB = 121.13 kB 121.13 kB
facebook-www/ReactDOM-prod.modern.js = 678.67 kB 678.67 kB = 119.48 kB 119.48 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +0.39% 224.62 kB 225.50 kB +0.41% 49.62 kB 49.82 kB
oss-stable-semver/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +0.38% 223.46 kB 224.32 kB +0.40% 49.39 kB 49.58 kB
oss-stable/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +0.38% 223.49 kB 224.35 kB +0.39% 49.42 kB 49.61 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.33% 179.05 kB 179.64 kB +0.36% 31.70 kB 31.81 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.32% 178.15 kB 178.73 kB +0.35% 31.56 kB 31.67 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.32% 178.15 kB 178.73 kB +0.35% 31.56 kB 31.67 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.32% 182.26 kB 182.85 kB +0.36% 32.19 kB 32.31 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.32% 182.29 kB 182.87 kB +0.36% 32.21 kB 32.32 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +0.32% 173.87 kB 174.42 kB +0.39% 30.25 kB 30.36 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.32% 181.36 kB 181.94 kB +0.35% 32.06 kB 32.17 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.32% 181.36 kB 181.94 kB +0.35% 32.06 kB 32.17 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.32% 181.38 kB 181.96 kB +0.34% 32.07 kB 32.18 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.32% 181.38 kB 181.96 kB +0.34% 32.07 kB 32.18 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js +0.32% 172.97 kB 173.52 kB +0.38% 30.08 kB 30.19 kB
oss-stable/react-client/cjs/react-client-flight.development.js +0.32% 172.99 kB 173.54 kB +0.37% 30.10 kB 30.21 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +0.31% 178.49 kB 179.05 kB +0.35% 31.30 kB 31.41 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +0.31% 177.56 kB 178.11 kB +0.31% 31.15 kB 31.25 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +0.31% 177.61 kB 178.16 kB +0.30% 31.18 kB 31.27 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.31% 180.45 kB 181.01 kB +0.36% 31.75 kB 31.86 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.31% 179.52 kB 180.07 kB +0.34% 31.58 kB 31.69 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.31% 179.57 kB 180.12 kB +0.34% 31.61 kB 31.71 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.30% 183.03 kB 183.59 kB +0.35% 32.24 kB 32.35 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.30% 183.49 kB 184.04 kB +0.34% 32.35 kB 32.46 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.30% 183.65 kB 184.21 kB +0.34% 32.40 kB 32.51 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.30% 182.10 kB 182.65 kB +0.32% 32.08 kB 32.18 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.30% 182.15 kB 182.70 kB +0.31% 32.10 kB 32.20 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.30% 182.62 kB 183.17 kB +0.32% 32.21 kB 32.32 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.30% 182.62 kB 183.17 kB +0.32% 32.21 kB 32.32 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.30% 182.72 kB 183.27 kB +0.33% 32.25 kB 32.35 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.30% 182.77 kB 183.32 kB +0.32% 32.27 kB 32.37 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.30% 185.16 kB 185.72 kB +0.34% 32.41 kB 32.52 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.30% 184.30 kB 184.85 kB +0.31% 32.28 kB 32.38 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.30% 184.30 kB 184.85 kB +0.31% 32.28 kB 32.38 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.30% 186.87 kB 187.42 kB +0.34% 32.68 kB 32.79 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.30% 186.00 kB 186.55 kB +0.31% 32.55 kB 32.65 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.30% 186.00 kB 186.55 kB +0.31% 32.55 kB 32.65 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.30% 188.28 kB 188.83 kB +0.35% 32.94 kB 33.05 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.30% 188.30 kB 188.85 kB +0.35% 32.95 kB 33.07 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.29% 187.41 kB 187.96 kB +0.31% 32.81 kB 32.91 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.29% 187.41 kB 187.96 kB +0.31% 32.81 kB 32.91 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.29% 187.43 kB 187.98 kB +0.31% 32.82 kB 32.92 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.29% 187.43 kB 187.98 kB +0.31% 32.82 kB 32.92 kB

Generated by 🚫 dangerJS against 8cdc1ea

Ignore any path that completed before the render started.
This is a bit more optimized because it doesn't create an intermediate
unnecessary array.
…eners

wakeChunk doesn't get called if we initialize a value without any listeners.
@eps1lon eps1lon merged commit 56e8469 into facebook:main Oct 14, 2025
240 of 241 checks passed
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