Skip to content

Conversation

@sebmarkbage
Copy link
Collaborator

@sebmarkbage sebmarkbage commented Jul 8, 2025

When a debug channel is available, we now allow objects to be lazily requested though the debug channel and only then will the server send it.

The client will actually eagerly ask for the next level of objects once it parses its payload. That way those objects have likely loaded by the time you actually expand that deep e.g. in the console repl. This is needed since the console repl is synchronous when you ask it to invoke getters.

Each level is lazily parsed which means that we don't parse the next level even though we eagerly loaded it. We parse it once the getter is invoked (in Chrome DevTools you have to click a little (...) to invoke the getter). When the getter is invoked, the chunk is initialized and parsed. This then causes the next level to be asked for through the debug channel. Ensuring that if you expand one more level you can do so synchronously.

Currently debug chunks are eagerly parsed, which means that if you have things like server component props that are lazy they can end up being immediately asked for, but I'm trying to move to make the debug chunks lazy.

Ahead of them actually being needed so they can be inspected synchronously.
We fetch eagerly one level deeper.
@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label Jul 8, 2025
@react-sizebot
Copy link

Comparing: b44a99b...6aef4a5

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 = 530.70 kB 530.50 kB = 93.70 kB 93.66 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 = 655.25 kB 655.04 kB = 115.40 kB 115.35 kB
facebook-www/ReactDOM-prod.classic.js = 675.13 kB 674.93 kB = 118.75 kB 118.71 kB
facebook-www/ReactDOM-prod.modern.js = 665.56 kB 665.36 kB = 117.12 kB 117.06 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-dom-esm/esm/react-server-dom-esm-client.browser.development.js +1.11% 151.23 kB 152.92 kB +1.22% 35.13 kB 35.56 kB
oss-stable/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +1.11% 151.26 kB 152.95 kB +1.22% 35.16 kB 35.59 kB
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +0.90% 187.72 kB 189.41 kB +0.94% 41.97 kB 42.37 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.65% 109.45 kB 110.15 kB +0.89% 20.42 kB 20.60 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.65% 109.50 kB 110.20 kB +0.88% 20.45 kB 20.63 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +0.64% 110.59 kB 111.30 kB +0.82% 20.49 kB 20.66 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +0.64% 110.64 kB 111.35 kB +0.82% 20.51 kB 20.68 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js +0.64% 111.05 kB 111.76 kB +0.81% 20.10 kB 20.26 kB
oss-stable/react-client/cjs/react-client-flight.development.js +0.64% 111.07 kB 111.78 kB +0.80% 20.12 kB 20.28 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.63% 111.63 kB 112.34 kB +0.87% 20.81 kB 21.00 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.63% 111.68 kB 112.39 kB +0.87% 20.84 kB 21.02 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.63% 112.19 kB 112.89 kB +0.87% 20.95 kB 21.13 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.63% 112.24 kB 112.94 kB +0.86% 20.98 kB 21.16 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.62% 113.73 kB 114.44 kB +0.80% 21.17 kB 21.34 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.62% 113.73 kB 114.44 kB +0.80% 21.17 kB 21.34 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.62% 114.83 kB 115.53 kB +0.78% 21.45 kB 21.62 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.62% 114.83 kB 115.53 kB +0.78% 21.45 kB 21.62 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.61% 116.30 kB 117.00 kB +0.77% 21.63 kB 21.80 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.61% 116.30 kB 117.00 kB +0.77% 21.63 kB 21.80 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.60% 117.87 kB 118.57 kB +0.78% 21.92 kB 22.09 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.60% 117.87 kB 118.57 kB +0.78% 21.92 kB 22.09 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.60% 117.96 kB 118.66 kB +0.77% 21.95 kB 22.12 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.60% 117.96 kB 118.66 kB +0.77% 21.95 kB 22.12 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.59% 119.17 kB 119.87 kB +0.78% 22.12 kB 22.29 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.59% 119.17 kB 119.87 kB +0.78% 22.12 kB 22.29 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.58% 121.87 kB 122.58 kB +0.75% 22.42 kB 22.58 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.58% 121.87 kB 122.58 kB +0.75% 22.42 kB 22.58 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.57% 123.20 kB 123.91 kB +0.74% 22.67 kB 22.83 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.57% 123.20 kB 123.91 kB +0.74% 22.67 kB 22.83 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.47% 151.94 kB 152.65 kB +0.44% 27.26 kB 27.38 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +0.46% 153.08 kB 153.79 kB +0.48% 27.27 kB 27.40 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +0.46% 153.51 kB 154.22 kB +0.45% 26.93 kB 27.05 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.46% 154.13 kB 154.83 kB +0.43% 27.65 kB 27.76 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.46% 154.68 kB 155.39 kB +0.43% 27.79 kB 27.91 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.45% 156.17 kB 156.87 kB +0.48% 28.02 kB 28.15 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +0.45% 157.26 kB 157.97 kB +0.43% 28.35 kB 28.48 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +0.45% 158.73 kB 159.44 kB +0.43% 28.48 kB 28.60 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.44% 160.30 kB 161.01 kB +0.41% 28.83 kB 28.94 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.44% 160.39 kB 161.10 kB +0.42% 28.86 kB 28.98 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.44% 161.60 kB 162.31 kB +0.41% 28.96 kB 29.08 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.43% 164.30 kB 165.01 kB +0.41% 29.26 kB 29.38 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.43% 165.64 kB 166.34 kB +0.43% 29.50 kB 29.63 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js +0.21% 125.57 kB 125.83 kB +0.15% 22.81 kB 22.85 kB
oss-stable/react-server/cjs/react-server-flight.development.js +0.21% 125.57 kB 125.83 kB +0.15% 22.81 kB 22.85 kB

Generated by 🚫 dangerJS against 6aef4a5

const debugChannel = response._debugChannel;
if (debugChannel) {
const ref = value.slice(2);
debugChannel('R:' + ref); // Release this reference immediately
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

We don't have a good way to release unreachable references since we don't know they exist inside a payload until we parse it and when we parse it, we immediately ask for it.

References held by the server aren't released until all lazy references of the whole response are GC:ed.

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