Skip to content

Conversation

@lubieowoce
Copy link
Contributor

@lubieowoce lubieowoce commented Jan 14, 2026

Currently, when we're re-encoding a lazy chunk that came from a flight stream, we wait for the chunk to resolve, and then forward the debug info. This unnecessarily delays debug info that's already available while the chunk is still pending, like the name and stack info. This PR attempts to make it so that we emit whatever debug info we have before initializing the lazy chunk (which may suspend), and then emit the rest after.

When a debug info array is partially emitted, we save the number of emitted entries we already emitted in a WeakMap request.partialDebugInfoProgress. That way, when we emit it again later, we know how many entries to skip.

Most debug infos are not partially emitted -- we currently only do this for lazy elements -- so to avoid the overhead of tracking the index for each debug info array, we only do this if it's emitted usingforwardDebugInfoProgressive.

Notably, we also need to handle cases when debug entries are transferred from the lazy chunk onto the inner element (i.e. moved to a different array) via moveDebugInfoFromChunkToInnerValue:

// If the lazy node is initialized, we move its debug info to the inner
// value.
if (lazyNode._payload.status === INITIALIZED && lazyNode._debugInfo) {
const debugInfo = lazyNode._debugInfo.splice(0);
if (element._debugInfo) {
// $FlowFixMe[method-unbinding]
element._debugInfo.unshift.apply(element._debugInfo, debugInfo);
} else {
Object.defineProperty(element, '_debugInfo', {
configurable: false,
enumerable: false,
writable: true,
value: debugInfo,
});
}
}
}

In this case, we have to make sure that new array has the same progress as the source. We do this in copyDebugInfoProgressToResolvedValue.

@meta-cla meta-cla bot added the CLA Signed label Jan 14, 2026
@react-sizebot
Copy link

react-sizebot commented Jan 14, 2026

Comparing: da64117...4550479

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.84 kB 6.84 kB +0.05% 1.88 kB 1.88 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 609.58 kB 609.58 kB = 107.80 kB 107.80 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.84 kB 6.84 kB = 1.88 kB 1.88 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 675.51 kB 675.51 kB = 118.75 kB 118.75 kB
facebook-www/ReactDOM-prod.classic.js = 695.14 kB 695.14 kB = 122.19 kB 122.19 kB
facebook-www/ReactDOM-prod.modern.js = 685.52 kB 685.52 kB = 120.59 kB 120.59 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 +1.38% 144.05 kB 146.03 kB +1.43% 25.73 kB 26.10 kB
oss-stable/react-server/cjs/react-server-flight.development.js +1.38% 144.05 kB 146.03 kB +1.43% 25.73 kB 26.10 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +1.36% 146.14 kB 148.12 kB +1.43% 26.19 kB 26.56 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.97% 205.08 kB 207.06 kB +0.99% 36.99 kB 37.36 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.97% 205.08 kB 207.06 kB +0.99% 36.99 kB 37.36 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.96% 207.18 kB 209.16 kB +0.95% 37.43 kB 37.79 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.95% 208.77 kB 210.75 kB +0.96% 37.51 kB 37.87 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.95% 208.77 kB 210.75 kB +0.96% 37.51 kB 37.87 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.94% 210.86 kB 212.84 kB +0.89% 37.94 kB 38.28 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.93% 212.86 kB 214.84 kB +0.93% 38.30 kB 38.66 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.93% 212.86 kB 214.84 kB +0.93% 38.30 kB 38.66 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.93% 213.34 kB 215.32 kB +0.92% 38.41 kB 38.76 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.93% 213.34 kB 215.32 kB +0.92% 38.41 kB 38.76 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.92% 214.97 kB 216.95 kB +0.88% 38.75 kB 39.09 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.92% 215.44 kB 217.42 kB +0.89% 38.86 kB 39.20 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.91% 216.66 kB 218.64 kB +0.94% 38.81 kB 39.17 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.91% 216.66 kB 218.64 kB +0.94% 38.81 kB 39.17 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.91% 216.66 kB 218.65 kB +0.93% 38.81 kB 39.18 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.91% 216.66 kB 218.65 kB +0.93% 38.81 kB 39.18 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.91% 218.75 kB 220.73 kB +0.87% 39.25 kB 39.59 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.91% 218.75 kB 220.74 kB +0.85% 39.26 kB 39.59 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.87% 231.71 kB 233.72 kB +0.85% 41.88 kB 42.23 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.87% 231.71 kB 233.72 kB +0.85% 41.88 kB 42.23 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.86% 233.80 kB 235.81 kB +0.86% 42.33 kB 42.70 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.84% 238.30 kB 240.31 kB +0.88% 42.46 kB 42.84 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.84% 238.30 kB 240.31 kB +0.88% 42.46 kB 42.84 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.83% 240.39 kB 242.40 kB +0.91% 42.92 kB 43.31 kB
oss-stable-semver/react-server-dom-unbundled/cjs/react-server-dom-unbundled-server.node.development.js +0.82% 244.96 kB 246.96 kB +0.83% 43.54 kB 43.90 kB
oss-stable/react-server-dom-unbundled/cjs/react-server-dom-unbundled-server.node.development.js +0.82% 244.96 kB 246.96 kB +0.83% 43.54 kB 43.90 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.81% 246.15 kB 248.16 kB +0.81% 43.87 kB 44.22 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.81% 246.15 kB 248.16 kB +0.81% 43.87 kB 44.22 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.81% 246.20 kB 248.21 kB +0.82% 43.86 kB 44.22 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.81% 246.20 kB 248.21 kB +0.82% 43.86 kB 44.22 kB
oss-experimental/react-server-dom-unbundled/cjs/react-server-dom-unbundled-server.node.development.js +0.81% 247.05 kB 249.05 kB +0.84% 44.01 kB 44.38 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.81% 248.24 kB 250.25 kB +0.83% 44.33 kB 44.70 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.81% 248.29 kB 250.30 kB +0.83% 44.33 kB 44.70 kB
oss-experimental/react-markup/cjs/react-markup.react-server.development.js +0.29% 674.33 kB 676.32 kB +0.27% 119.44 kB 119.76 kB

Generated by 🚫 dangerJS against 4550479

@lubieowoce lubieowoce changed the title WIP: Forward early debug info for lazy chunks Forward early debug info for lazy chunks [WIP] Jan 14, 2026
@lubieowoce lubieowoce force-pushed the reencode-debug-info branch 8 times, most recently from b6057e3 to bb3681d Compare January 21, 2026 15:32
@lubieowoce lubieowoce marked this pull request as ready for review January 21, 2026 15:35
@lubieowoce lubieowoce changed the title Forward early debug info for lazy chunks [WIP] Forward early debug info for lazy chunks Jan 21, 2026
@unstubbable unstubbable changed the title Forward early debug info for lazy chunks [Flight] Forward early debug info for lazy chunks Jan 21, 2026
@lubieowoce lubieowoce force-pushed the reencode-debug-info branch 2 times, most recently from 3cc2596 to 8a3fc67 Compare January 29, 2026 23:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants