Skip to content
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

[Flight] Emit debug info for a Server Component #28272

Merged
merged 1 commit into from
Feb 8, 2024

Conversation

sebmarkbage
Copy link
Collaborator

This adds a new DEV-only row type D for DebugInfo. If we see this in prod, that's an error. It can contain extra debug information about the Server Components (or Promises) that were compiled away during the server render. It's DEV-only since this can contain sensitive information (similar to errors) and since it'll be a lot of data, but it's worth using the same stream for simplicity rather than a side-channel.

In this first pass it's just the Server Component's name but I'll keep adding more debug info to the stream, and it won't always just be a Server Component's stack frame.

Each row can get more debug rows data streaming in as it resolves and renders multiple server components in a row.

The data structure is just a side-channel and it would be perfectly fine to ignore the D rows and it would behave the same as prod. With this data structure though the data is associated with the row ID / chunk, so you can't have inline meta data. This means that an inline Server Component that doesn't get an ID otherwise will need to be outlined. The way I outline Server Components is using a direct reference where it's synchronous though so on the client side it behaves the same (i.e. there's no lazy wrapper in this case).

In most cases the _debugInfo is on the Promises that we yield and we also expose this on the React.Lazy wrappers. In the case where it's a synchronous render it might attach this data to Elements or Arrays (fragments) too.

In a future PR I'll wire this information up with Fiber to stash it in the Fiber data structures so that DevTools can pick it up. This property and the information in it is not limited to Server Components. The name of the property that we look for probably shouldn't be _debugInfo since it's semi-public. Should consider the name we use for that.

If it's a synchronous render that returns a string or number (text node) then we don't have anywhere to attach them to. We could add a React.Lazy wrapper for those but I chose to prioritize keeping the data structure untouched. Can be useful if you use Server Components to render data instead of React Nodes.

@facebook-github-bot facebook-github-bot added CLA Signed React Core Team Opened by a member of the React Core Team labels Feb 7, 2024
@@ -1306,7 +1350,7 @@ function renderModelDestructive(
}
if (value instanceof Float64Array) {
// double
return serializeTypedArray(request, 'D', value);
return serializeTypedArray(request, 'd', 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.

I switched this to use the lower case since the capital version fits better with the other common cases and this is very rare.

(The d is for double.)

@@ -605,6 +622,33 @@ function renderClientElement(
return element;
}

// The chunk ID we're currently rendering that we can assign debug data to.
let debugID: null | number = null;
Copy link
Collaborator Author

@sebmarkbage sebmarkbage Feb 7, 2024

Choose a reason for hiding this comment

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

This is mainly to know if we're at the shallow end of the task or deep within the task. We really have the ID on the task already, but we can use this for other things too like console.logs.

// If you use() to Suspend this should always exist but if you throw a Promise instead,
// which is not really supported anymore, it will be empty. We use the empty set as a
// marker to know if this was a replay of the same component or first attempt.
const state = thenableState || createThenableState();
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

@acdlite I used a new mutable state if it wasn't already created.

I really only need this for DEV mode but seems generally useful. We could align Fizz/Fiber too but not necessary.

@react-sizebot
Copy link

react-sizebot commented Feb 7, 2024

Comparing: 37d901e...2a299a6

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.min.js = 176.64 kB 176.64 kB = 55.02 kB 55.02 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js = 178.63 kB 178.63 kB = 55.60 kB 55.60 kB
facebook-www/ReactDOM-prod.classic.js = 591.73 kB 591.73 kB = 104.44 kB 104.44 kB
facebook-www/ReactDOM-prod.modern.js = 575.51 kB 575.51 kB = 101.53 kB 101.53 kB
facebook-www/ReactFlightDOMClient-dev.modern.js +6.98% 34.66 kB 37.08 kB +6.94% 7.95 kB 8.50 kB
oss-stable-semver/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +4.22% 51.43 kB 53.60 kB +4.08% 12.42 kB 12.92 kB
oss-stable/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +4.22% 51.43 kB 53.60 kB +4.08% 12.42 kB 12.92 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js +4.21% 51.48 kB 53.65 kB +3.95% 12.81 kB 13.31 kB
oss-stable/react-client/cjs/react-client-flight.development.js +4.21% 51.48 kB 53.65 kB +3.95% 12.81 kB 13.31 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +4.20% 51.63 kB 53.80 kB +4.07% 12.48 kB 12.99 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +4.20% 51.63 kB 53.80 kB +4.07% 12.48 kB 12.99 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +3.95% 54.88 kB 57.05 kB +3.79% 13.45 kB 13.95 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +3.95% 54.88 kB 57.05 kB +3.79% 13.45 kB 13.95 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +3.91% 55.39 kB 57.56 kB +3.73% 13.63 kB 14.14 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +3.91% 55.39 kB 57.56 kB +3.73% 13.63 kB 14.14 kB
oss-stable-semver/react-server-dom-turbopack/umd/react-server-dom-turbopack-client.browser.development.js +3.88% 58.38 kB 60.65 kB +3.70% 13.67 kB 14.17 kB
oss-stable/react-server-dom-turbopack/umd/react-server-dom-turbopack-client.browser.development.js +3.88% 58.38 kB 60.65 kB +3.70% 13.67 kB 14.17 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-client.browser.development.js +3.85% 58.93 kB 61.19 kB +3.66% 13.85 kB 14.36 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-client.browser.development.js +3.85% 58.93 kB 61.19 kB +3.66% 13.85 kB 14.36 kB
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +3.84% 56.48 kB 58.65 kB +3.76% 13.42 kB 13.92 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +3.84% 56.53 kB 58.70 kB +3.64% 13.81 kB 14.32 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +3.83% 56.68 kB 58.85 kB +3.74% 13.48 kB 13.99 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +3.76% 57.70 kB 59.87 kB +3.55% 14.07 kB 14.57 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +3.76% 57.70 kB 59.87 kB +3.55% 14.07 kB 14.57 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +3.64% 59.49 kB 61.65 kB +3.41% 14.62 kB 15.12 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +3.64% 59.49 kB 61.65 kB +3.41% 14.62 kB 15.12 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +3.64% 59.52 kB 61.69 kB +3.41% 14.64 kB 15.14 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +3.64% 59.52 kB 61.69 kB +3.41% 14.64 kB 15.14 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +3.62% 59.93 kB 62.10 kB +3.48% 14.45 kB 14.95 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +3.59% 60.44 kB 62.61 kB +3.44% 14.63 kB 15.13 kB
oss-experimental/react-server-dom-turbopack/umd/react-server-dom-turbopack-client.browser.development.js +3.56% 63.74 kB 66.01 kB +3.51% 14.68 kB 15.20 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +3.56% 60.92 kB 63.09 kB +3.32% 15.01 kB 15.51 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +3.56% 60.92 kB 63.09 kB +3.32% 15.01 kB 15.51 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +3.56% 60.95 kB 63.11 kB +3.30% 15.05 kB 15.55 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +3.56% 60.95 kB 63.11 kB +3.30% 15.05 kB 15.55 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-client.browser.development.js +3.53% 64.28 kB 66.55 kB +3.46% 14.87 kB 15.38 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +3.51% 61.81 kB 63.98 kB +3.30% 15.21 kB 15.71 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +3.51% 61.81 kB 63.98 kB +3.30% 15.21 kB 15.71 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +3.51% 61.83 kB 64.00 kB +3.29% 15.25 kB 15.75 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +3.51% 61.83 kB 64.00 kB +3.29% 15.25 kB 15.75 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +3.46% 62.75 kB 64.92 kB +3.32% 15.08 kB 15.58 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js +3.42% 64.31 kB 66.51 kB +3.77% 15.61 kB 16.20 kB
oss-stable/react-server/cjs/react-server-flight.development.js +3.42% 64.31 kB 66.51 kB +3.77% 15.61 kB 16.20 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +3.36% 64.53 kB 66.70 kB +3.23% 15.63 kB 16.13 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +3.36% 64.57 kB 66.74 kB +3.21% 15.65 kB 16.15 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +3.29% 65.97 kB 68.14 kB +3.13% 16.02 kB 16.52 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +3.29% 65.99 kB 68.16 kB +3.13% 16.06 kB 16.56 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +3.25% 66.86 kB 69.03 kB +3.11% 16.23 kB 16.73 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +3.24% 66.88 kB 69.05 kB +3.10% 16.27 kB 16.77 kB
facebook-www/ReactFlightDOMServer-dev.modern.js +2.98% 81.98 kB 84.42 kB +3.26% 17.67 kB 18.25 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +2.98% 74.01 kB 76.21 kB +3.24% 17.61 kB 18.18 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +2.24% 98.48 kB 100.68 kB +2.56% 23.40 kB 23.99 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +2.24% 98.48 kB 100.68 kB +2.56% 23.40 kB 23.99 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +2.19% 100.75 kB 102.95 kB +2.44% 24.23 kB 24.83 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +2.19% 100.75 kB 102.95 kB +2.44% 24.23 kB 24.83 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +2.17% 101.45 kB 103.66 kB +2.41% 24.43 kB 25.02 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +2.17% 101.45 kB 103.66 kB +2.41% 24.43 kB 25.02 kB
oss-stable-semver/react-server-dom-turbopack/umd/react-server-dom-turbopack-server.browser.development.js +2.16% 106.42 kB 108.73 kB +2.26% 24.56 kB 25.12 kB
oss-stable/react-server-dom-turbopack/umd/react-server-dom-turbopack-server.browser.development.js +2.16% 106.42 kB 108.73 kB +2.26% 24.56 kB 25.12 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +2.13% 103.34 kB 105.54 kB +2.35% 24.96 kB 25.55 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +2.13% 103.34 kB 105.54 kB +2.35% 24.96 kB 25.55 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +2.13% 103.52 kB 105.72 kB +2.36% 24.99 kB 25.58 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +2.13% 103.52 kB 105.72 kB +2.36% 24.99 kB 25.58 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.development.js +2.12% 103.89 kB 106.09 kB +2.39% 24.61 kB 25.20 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.development.js +2.12% 103.89 kB 106.09 kB +2.39% 24.61 kB 25.20 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.development.js +2.11% 109.15 kB 111.45 kB +2.25% 25.29 kB 25.86 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.development.js +2.11% 109.15 kB 111.45 kB +2.25% 25.29 kB 25.86 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.min.js +2.09% 10.30 kB 10.51 kB +2.41% 3.91 kB 4.00 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.min.js +2.09% 10.30 kB 10.51 kB +2.41% 3.91 kB 4.00 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +2.07% 106.31 kB 108.52 kB +2.34% 25.22 kB 25.81 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +2.07% 106.31 kB 108.52 kB +2.34% 25.22 kB 25.81 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +2.07% 106.53 kB 108.73 kB +2.29% 25.45 kB 26.03 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +2.07% 106.53 kB 108.73 kB +2.29% 25.45 kB 26.03 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +2.02% 108.95 kB 111.15 kB +2.23% 26.10 kB 26.68 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +2.02% 108.95 kB 111.15 kB +2.23% 26.10 kB 26.68 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +2.02% 109.06 kB 111.26 kB +2.20% 25.71 kB 26.28 kB
test_utils/ReactAllWarnings.js Deleted 67.02 kB 0.00 kB Deleted 16.42 kB 0.00 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
facebook-www/ReactFlightDOMClient-dev.modern.js +6.98% 34.66 kB 37.08 kB +6.94% 7.95 kB 8.50 kB
oss-stable-semver/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +4.22% 51.43 kB 53.60 kB +4.08% 12.42 kB 12.92 kB
oss-stable/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +4.22% 51.43 kB 53.60 kB +4.08% 12.42 kB 12.92 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js +4.21% 51.48 kB 53.65 kB +3.95% 12.81 kB 13.31 kB
oss-stable/react-client/cjs/react-client-flight.development.js +4.21% 51.48 kB 53.65 kB +3.95% 12.81 kB 13.31 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +4.20% 51.63 kB 53.80 kB +4.07% 12.48 kB 12.99 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +4.20% 51.63 kB 53.80 kB +4.07% 12.48 kB 12.99 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +3.95% 54.88 kB 57.05 kB +3.79% 13.45 kB 13.95 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +3.95% 54.88 kB 57.05 kB +3.79% 13.45 kB 13.95 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +3.91% 55.39 kB 57.56 kB +3.73% 13.63 kB 14.14 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +3.91% 55.39 kB 57.56 kB +3.73% 13.63 kB 14.14 kB
oss-stable-semver/react-server-dom-turbopack/umd/react-server-dom-turbopack-client.browser.development.js +3.88% 58.38 kB 60.65 kB +3.70% 13.67 kB 14.17 kB
oss-stable/react-server-dom-turbopack/umd/react-server-dom-turbopack-client.browser.development.js +3.88% 58.38 kB 60.65 kB +3.70% 13.67 kB 14.17 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-client.browser.development.js +3.85% 58.93 kB 61.19 kB +3.66% 13.85 kB 14.36 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-client.browser.development.js +3.85% 58.93 kB 61.19 kB +3.66% 13.85 kB 14.36 kB
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +3.84% 56.48 kB 58.65 kB +3.76% 13.42 kB 13.92 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +3.84% 56.53 kB 58.70 kB +3.64% 13.81 kB 14.32 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +3.83% 56.68 kB 58.85 kB +3.74% 13.48 kB 13.99 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +3.76% 57.70 kB 59.87 kB +3.55% 14.07 kB 14.57 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +3.76% 57.70 kB 59.87 kB +3.55% 14.07 kB 14.57 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +3.64% 59.49 kB 61.65 kB +3.41% 14.62 kB 15.12 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +3.64% 59.49 kB 61.65 kB +3.41% 14.62 kB 15.12 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +3.64% 59.52 kB 61.69 kB +3.41% 14.64 kB 15.14 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +3.64% 59.52 kB 61.69 kB +3.41% 14.64 kB 15.14 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +3.62% 59.93 kB 62.10 kB +3.48% 14.45 kB 14.95 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +3.59% 60.44 kB 62.61 kB +3.44% 14.63 kB 15.13 kB
oss-experimental/react-server-dom-turbopack/umd/react-server-dom-turbopack-client.browser.development.js +3.56% 63.74 kB 66.01 kB +3.51% 14.68 kB 15.20 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +3.56% 60.92 kB 63.09 kB +3.32% 15.01 kB 15.51 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +3.56% 60.92 kB 63.09 kB +3.32% 15.01 kB 15.51 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +3.56% 60.95 kB 63.11 kB +3.30% 15.05 kB 15.55 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +3.56% 60.95 kB 63.11 kB +3.30% 15.05 kB 15.55 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-client.browser.development.js +3.53% 64.28 kB 66.55 kB +3.46% 14.87 kB 15.38 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +3.51% 61.81 kB 63.98 kB +3.30% 15.21 kB 15.71 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +3.51% 61.81 kB 63.98 kB +3.30% 15.21 kB 15.71 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +3.51% 61.83 kB 64.00 kB +3.29% 15.25 kB 15.75 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +3.51% 61.83 kB 64.00 kB +3.29% 15.25 kB 15.75 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +3.46% 62.75 kB 64.92 kB +3.32% 15.08 kB 15.58 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js +3.42% 64.31 kB 66.51 kB +3.77% 15.61 kB 16.20 kB
oss-stable/react-server/cjs/react-server-flight.development.js +3.42% 64.31 kB 66.51 kB +3.77% 15.61 kB 16.20 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +3.36% 64.53 kB 66.70 kB +3.23% 15.63 kB 16.13 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +3.36% 64.57 kB 66.74 kB +3.21% 15.65 kB 16.15 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +3.29% 65.97 kB 68.14 kB +3.13% 16.02 kB 16.52 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +3.29% 65.99 kB 68.16 kB +3.13% 16.06 kB 16.56 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +3.25% 66.86 kB 69.03 kB +3.11% 16.23 kB 16.73 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +3.24% 66.88 kB 69.05 kB +3.10% 16.27 kB 16.77 kB
facebook-www/ReactFlightDOMServer-dev.modern.js +2.98% 81.98 kB 84.42 kB +3.26% 17.67 kB 18.25 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +2.98% 74.01 kB 76.21 kB +3.24% 17.61 kB 18.18 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +2.24% 98.48 kB 100.68 kB +2.56% 23.40 kB 23.99 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +2.24% 98.48 kB 100.68 kB +2.56% 23.40 kB 23.99 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +2.19% 100.75 kB 102.95 kB +2.44% 24.23 kB 24.83 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +2.19% 100.75 kB 102.95 kB +2.44% 24.23 kB 24.83 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +2.17% 101.45 kB 103.66 kB +2.41% 24.43 kB 25.02 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +2.17% 101.45 kB 103.66 kB +2.41% 24.43 kB 25.02 kB
oss-stable-semver/react-server-dom-turbopack/umd/react-server-dom-turbopack-server.browser.development.js +2.16% 106.42 kB 108.73 kB +2.26% 24.56 kB 25.12 kB
oss-stable/react-server-dom-turbopack/umd/react-server-dom-turbopack-server.browser.development.js +2.16% 106.42 kB 108.73 kB +2.26% 24.56 kB 25.12 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +2.13% 103.34 kB 105.54 kB +2.35% 24.96 kB 25.55 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +2.13% 103.34 kB 105.54 kB +2.35% 24.96 kB 25.55 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +2.13% 103.52 kB 105.72 kB +2.36% 24.99 kB 25.58 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +2.13% 103.52 kB 105.72 kB +2.36% 24.99 kB 25.58 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.development.js +2.12% 103.89 kB 106.09 kB +2.39% 24.61 kB 25.20 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.development.js +2.12% 103.89 kB 106.09 kB +2.39% 24.61 kB 25.20 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.development.js +2.11% 109.15 kB 111.45 kB +2.25% 25.29 kB 25.86 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.development.js +2.11% 109.15 kB 111.45 kB +2.25% 25.29 kB 25.86 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.min.js +2.09% 10.30 kB 10.51 kB +2.41% 3.91 kB 4.00 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.min.js +2.09% 10.30 kB 10.51 kB +2.41% 3.91 kB 4.00 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +2.07% 106.31 kB 108.52 kB +2.34% 25.22 kB 25.81 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +2.07% 106.31 kB 108.52 kB +2.34% 25.22 kB 25.81 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +2.07% 106.53 kB 108.73 kB +2.29% 25.45 kB 26.03 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +2.07% 106.53 kB 108.73 kB +2.29% 25.45 kB 26.03 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +2.02% 108.95 kB 111.15 kB +2.23% 26.10 kB 26.68 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +2.02% 108.95 kB 111.15 kB +2.23% 26.10 kB 26.68 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +2.02% 109.06 kB 111.26 kB +2.20% 25.71 kB 26.28 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +1.98% 111.13 kB 113.33 kB +2.10% 26.51 kB 27.06 kB
oss-experimental/react-server-dom-turbopack/umd/react-server-dom-turbopack-server.browser.development.js +1.96% 117.26 kB 119.56 kB +2.18% 26.84 kB 27.42 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.min.js +1.96% 11.03 kB 11.24 kB +2.24% 4.19 kB 4.29 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.min.js +1.96% 11.03 kB 11.24 kB +2.24% 4.19 kB 4.29 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +1.96% 112.51 kB 114.71 kB +2.06% 26.93 kB 27.49 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.min.js +1.94% 11.15 kB 11.36 kB +2.27% 4.23 kB 4.32 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.min.js +1.94% 11.15 kB 11.36 kB +2.27% 4.23 kB 4.32 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +1.94% 113.71 kB 115.91 kB +2.07% 27.22 kB 27.79 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.development.js +1.92% 114.47 kB 116.67 kB +2.06% 26.93 kB 27.49 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +1.92% 114.57 kB 116.77 kB +2.04% 27.49 kB 28.05 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.development.js +1.92% 119.98 kB 122.29 kB +2.07% 27.57 kB 28.14 kB
oss-stable-semver/react-server-dom-turbopack/umd/react-server-dom-turbopack-client.browser.production.min.js +1.92% 11.22 kB 11.43 kB +2.22% 4.27 kB 4.37 kB
oss-stable/react-server-dom-turbopack/umd/react-server-dom-turbopack-client.browser.production.min.js +1.92% 11.22 kB 11.43 kB +2.22% 4.27 kB 4.37 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-client.browser.production.min.js +1.90% 11.34 kB 11.56 kB +2.18% 4.31 kB 4.41 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-client.browser.production.min.js +1.90% 11.34 kB 11.56 kB +2.18% 4.31 kB 4.41 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +1.88% 116.89 kB 119.09 kB +2.03% 27.55 kB 28.11 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +1.88% 117.11 kB 119.31 kB +2.01% 27.76 kB 28.32 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.min.js +1.87% 11.60 kB 11.82 kB +2.25% 4.26 kB 4.36 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +1.84% 119.53 kB 121.73 kB +1.95% 28.44 kB 28.99 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.min.js +1.77% 12.16 kB 12.37 kB +2.03% 4.53 kB 4.62 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.min.js +1.77% 12.16 kB 12.37 kB +2.03% 4.53 kB 4.62 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.min.js +1.76% 12.33 kB 12.55 kB +2.18% 4.54 kB 4.64 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.min.js +1.74% 12.45 kB 12.67 kB +2.12% 4.58 kB 4.67 kB
oss-experimental/react-server-dom-turbopack/umd/react-server-dom-turbopack-client.browser.production.min.js +1.74% 12.52 kB 12.74 kB +1.99% 4.62 kB 4.72 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-client.browser.production.min.js +1.72% 12.65 kB 12.87 kB +1.99% 4.67 kB 4.76 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.min.js +1.71% 12.55 kB 12.77 kB +2.02% 4.71 kB 4.81 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.min.js +1.71% 12.55 kB 12.77 kB +2.02% 4.71 kB 4.81 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.min.js +1.71% 12.55 kB 12.77 kB +2.02% 4.71 kB 4.81 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.min.js +1.71% 12.55 kB 12.77 kB +2.02% 4.71 kB 4.81 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.min.js +1.67% 12.87 kB 13.08 kB +1.90% 4.83 kB 4.93 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.min.js +1.67% 12.87 kB 13.08 kB +1.90% 4.83 kB 4.93 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.min.js +1.67% 12.87 kB 13.09 kB +1.92% 4.84 kB 4.94 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.min.js +1.67% 12.87 kB 13.09 kB +1.92% 4.84 kB 4.94 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.min.js +1.64% 13.17 kB 13.38 kB +1.95% 4.93 kB 5.03 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.min.js +1.64% 13.17 kB 13.38 kB +1.95% 4.93 kB 5.03 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.min.js +1.64% 13.18 kB 13.39 kB +1.94% 4.94 kB 5.04 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.min.js +1.64% 13.18 kB 13.39 kB +1.94% 4.94 kB 5.04 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.min.js +1.62% 13.48 kB 13.70 kB +1.84% 4.90 kB 4.99 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.min.js +1.57% 13.87 kB 14.09 kB +1.83% 5.09 kB 5.18 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.min.js +1.57% 13.88 kB 14.09 kB +1.83% 5.09 kB 5.18 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.min.js +1.54% 14.19 kB 14.41 kB +1.81% 5.20 kB 5.29 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.min.js +1.54% 14.19 kB 14.41 kB +1.80% 5.21 kB 5.30 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.min.js +1.51% 14.48 kB 14.69 kB +1.81% 5.29 kB 5.39 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.min.js +1.51% 14.48 kB 14.70 kB +1.77% 5.30 kB 5.40 kB
facebook-www/ReactFlightDOMClient-prod.modern.js +1.47% 18.73 kB 19.00 kB +2.43% 4.40 kB 4.51 kB
oss-stable-semver/react-server-dom-esm/esm/react-server-dom-esm-client.browser.production.min.js +0.86% 39.64 kB 39.97 kB +1.21% 9.60 kB 9.72 kB
oss-stable/react-server-dom-esm/esm/react-server-dom-esm-client.browser.production.min.js +0.86% 39.64 kB 39.97 kB +1.21% 9.60 kB 9.72 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js +0.85% 39.75 kB 40.09 kB +1.23% 9.63 kB 9.74 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js +0.85% 39.75 kB 40.09 kB +1.23% 9.63 kB 9.74 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js +0.79% 43.01 kB 43.35 kB +1.06% 10.58 kB 10.69 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js +0.79% 43.01 kB 43.35 kB +1.06% 10.58 kB 10.69 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js +0.78% 43.53 kB 43.87 kB +1.06% 10.74 kB 10.85 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js +0.78% 43.53 kB 43.87 kB +1.06% 10.74 kB 10.85 kB
oss-stable-semver/react-server/cjs/react-server-flight.production.js +0.76% 56.34 kB 56.77 kB +1.10% 13.74 kB 13.89 kB
oss-stable/react-server/cjs/react-server-flight.production.js +0.76% 56.34 kB 56.77 kB +1.10% 13.74 kB 13.89 kB
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.production.min.js +0.76% 44.72 kB 45.06 kB +1.05% 10.61 kB 10.72 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js +0.76% 44.84 kB 45.18 kB +1.03% 10.63 kB 10.74 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js +0.74% 45.74 kB 46.08 kB +0.97% 11.27 kB 11.38 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js +0.74% 45.74 kB 46.08 kB +0.97% 11.27 kB 11.38 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.js +0.71% 47.53 kB 47.87 kB +0.92% 11.83 kB 11.93 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.js +0.71% 47.53 kB 47.87 kB +0.92% 11.83 kB 11.93 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +0.71% 47.56 kB 47.90 kB +0.92% 11.85 kB 11.96 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +0.71% 47.56 kB 47.90 kB +0.92% 11.85 kB 11.96 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js +0.71% 48.10 kB 48.44 kB +0.93% 11.58 kB 11.69 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js +0.70% 48.62 kB 48.96 kB +0.95% 11.74 kB 11.85 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js +0.69% 48.97 kB 49.30 kB +0.89% 12.18 kB 12.29 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js +0.69% 48.97 kB 49.30 kB +0.89% 12.18 kB 12.29 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +0.69% 48.99 kB 49.33 kB +0.90% 12.23 kB 12.34 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +0.69% 48.99 kB 49.33 kB +0.90% 12.23 kB 12.34 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js +0.68% 49.89 kB 50.23 kB +0.88% 12.39 kB 12.50 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js +0.68% 49.89 kB 50.23 kB +0.88% 12.39 kB 12.50 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js +0.68% 49.92 kB 50.26 kB +0.88% 12.44 kB 12.54 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js +0.68% 49.92 kB 50.26 kB +0.88% 12.44 kB 12.54 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js +0.67% 50.83 kB 51.17 kB +0.92% 12.29 kB 12.40 kB
oss-experimental/react-server/cjs/react-server-flight.production.js +0.65% 66.01 kB 66.44 kB +1.02% 15.72 kB 15.88 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.js +0.65% 52.61 kB 52.96 kB +0.88% 12.84 kB 12.95 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +0.65% 52.65 kB 52.99 kB +0.87% 12.86 kB 12.97 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js +0.63% 54.05 kB 54.39 kB +0.86% 13.19 kB 13.30 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +0.63% 54.08 kB 54.42 kB +0.84% 13.24 kB 13.35 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js +0.62% 54.98 kB 55.32 kB +0.84% 13.40 kB 13.52 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js +0.62% 55.01 kB 55.35 kB +0.83% 13.45 kB 13.56 kB
facebook-react-native/react/cjs/JSXDEVRuntime-dev.js +0.59% 39.94 kB 40.17 kB +0.29% 10.52 kB 10.55 kB
facebook-react-native/react/cjs/JSXRuntime-dev.js +0.58% 40.60 kB 40.83 kB +0.35% 10.70 kB 10.73 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +0.48% 89.74 kB 90.17 kB +0.83% 21.27 kB 21.45 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +0.48% 89.74 kB 90.17 kB +0.83% 21.27 kB 21.45 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +0.47% 91.81 kB 92.24 kB +0.67% 22.09 kB 22.24 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +0.47% 91.81 kB 92.24 kB +0.67% 22.09 kB 22.24 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +0.47% 92.47 kB 92.90 kB +0.81% 22.30 kB 22.48 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +0.47% 92.47 kB 92.90 kB +0.81% 22.30 kB 22.48 kB
oss-experimental/react/cjs/react-jsx-dev-runtime.development.js +0.46% 45.69 kB 45.90 kB +0.24% 13.36 kB 13.40 kB
oss-stable-semver/react/cjs/react-jsx-dev-runtime.development.js +0.46% 45.72 kB 45.93 kB +0.24% 13.37 kB 13.40 kB
oss-stable/react/cjs/react-jsx-dev-runtime.development.js +0.46% 45.72 kB 45.93 kB +0.24% 13.37 kB 13.40 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +0.46% 94.39 kB 94.82 kB +0.64% 22.82 kB 22.97 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +0.46% 94.39 kB 94.82 kB +0.64% 22.82 kB 22.97 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +0.45% 94.53 kB 94.96 kB +0.79% 22.86 kB 23.04 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +0.45% 94.53 kB 94.96 kB +0.79% 22.86 kB 23.04 kB
oss-experimental/react/cjs/react-jsx-runtime.development.js +0.45% 46.29 kB 46.50 kB +0.24% 13.54 kB 13.57 kB
oss-stable-semver/react/cjs/react-jsx-runtime.development.js +0.45% 46.31 kB 46.52 kB +0.24% 13.55 kB 13.58 kB
oss-stable/react/cjs/react-jsx-runtime.development.js +0.45% 46.31 kB 46.52 kB +0.24% 13.55 kB 13.58 kB
oss-experimental/react/cjs/react-jsx-runtime.react-server.development.js +0.45% 46.37 kB 46.58 kB +0.24% 13.57 kB 13.61 kB
oss-stable-semver/react/cjs/react-jsx-runtime.react-server.development.js +0.45% 46.40 kB 46.61 kB +0.24% 13.58 kB 13.61 kB
oss-stable/react/cjs/react-jsx-runtime.react-server.development.js +0.45% 46.40 kB 46.61 kB +0.24% 13.58 kB 13.61 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.production.js +0.45% 95.14 kB 95.57 kB +0.78% 22.49 kB 22.67 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.production.js +0.45% 95.14 kB 95.57 kB +0.78% 22.49 kB 22.67 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.production.js +0.44% 97.56 kB 97.99 kB +0.72% 23.11 kB 23.28 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.production.js +0.44% 97.56 kB 97.99 kB +0.72% 23.11 kB 23.28 kB
facebook-www/JSXDEVRuntime-dev.modern.js +0.44% 53.15 kB 53.39 kB +0.26% 13.85 kB 13.89 kB
facebook-www/JSXDEVRuntime-dev.classic.js +0.44% 53.15 kB 53.39 kB +0.26% 13.85 kB 13.88 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +0.44% 97.81 kB 98.24 kB +0.73% 23.33 kB 23.50 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +0.44% 97.81 kB 98.24 kB +0.73% 23.33 kB 23.50 kB
facebook-www/ReactServer-dev.modern.js +0.43% 107.78 kB 108.25 kB +0.55% 25.70 kB 25.84 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +0.43% 99.65 kB 100.08 kB +0.66% 23.34 kB 23.50 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +0.43% 100.22 kB 100.65 kB +0.70% 24.00 kB 24.17 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +0.43% 100.22 kB 100.65 kB +0.70% 24.00 kB 24.17 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +0.42% 102.16 kB 102.59 kB +0.61% 24.34 kB 24.49 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +0.42% 102.82 kB 103.25 kB +0.59% 24.55 kB 24.70 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +0.41% 104.74 kB 105.17 kB +0.59% 25.07 kB 25.22 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +0.41% 104.88 kB 105.31 kB +0.57% 25.12 kB 25.26 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.production.js +0.41% 105.05 kB 105.48 kB +0.59% 24.57 kB 24.71 kB
oss-stable-semver/react-client/cjs/react-client-flight.production.js +0.40% 39.40 kB 39.55 kB +0.34% 10.01 kB 10.05 kB
oss-stable/react-client/cjs/react-client-flight.production.js +0.40% 39.40 kB 39.55 kB +0.34% 10.01 kB 10.05 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.production.js +0.40% 107.46 kB 107.89 kB +0.58% 25.18 kB 25.32 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +0.40% 107.71 kB 108.14 kB +0.57% 25.40 kB 25.54 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +0.39% 110.12 kB 110.55 kB +0.56% 26.07 kB 26.22 kB
facebook-react-native/react/cjs/React-dev.js +0.37% 127.27 kB 127.73 kB +0.17% 29.44 kB 29.49 kB
oss-experimental/react-client/cjs/react-client-flight.production.js +0.36% 44.39 kB 44.55 kB +0.31% 11.01 kB 11.04 kB
facebook-www/React-dev.modern.js +0.33% 140.10 kB 140.57 kB +0.30% 33.94 kB 34.04 kB
facebook-www/React-dev.classic.js +0.33% 141.33 kB 141.79 kB +0.30% 34.20 kB 34.30 kB
oss-stable-semver/react-client/cjs/react-client-flight.production.min.js +0.28% 10.06 kB 10.09 kB +0.24% 3.81 kB 3.82 kB
oss-stable/react-client/cjs/react-client-flight.production.min.js +0.28% 10.06 kB 10.09 kB +0.24% 3.81 kB 3.82 kB
oss-stable-semver/react/cjs/react.react-server.development.js +0.27% 77.38 kB 77.59 kB +0.16% 21.40 kB 21.43 kB
oss-stable/react/cjs/react.react-server.development.js +0.27% 77.41 kB 77.62 kB +0.16% 21.42 kB 21.46 kB
oss-experimental/react-client/cjs/react-client-flight.production.min.js +0.27% 11.25 kB 11.28 kB +0.41% 4.14 kB 4.16 kB
oss-experimental/react/cjs/react.react-server.development.js +0.25% 83.84 kB 84.05 kB +0.14% 23.29 kB 23.32 kB
oss-stable-semver/react/cjs/react.development.js +0.21% 101.65 kB 101.86 kB +0.14% 27.18 kB 27.22 kB
oss-stable/react/cjs/react.development.js +0.21% 101.68 kB 101.89 kB +0.14% 27.21 kB 27.25 kB
oss-experimental/react/cjs/react.development.js +0.20% 104.21 kB 104.42 kB +0.14% 27.85 kB 27.89 kB
facebook-www/ReactFlightDOMServer-prod.modern.js = 38.32 kB 38.23 kB +0.07% 8.72 kB 8.72 kB
test_utils/ReactAllWarnings.js Deleted 67.02 kB 0.00 kB Deleted 16.42 kB 0.00 kB

Generated by 🚫 dangerJS against 2a299a6

@sebmarkbage sebmarkbage force-pushed the outlinersc branch 2 times, most recently from 62da24a to 3cfd12b Compare February 7, 2024 21:41
@@ -76,53 +76,63 @@ const RESOLVED_MODULE = 'resolved_module';
const INITIALIZED = 'fulfilled';
const ERRORED = 'rejected';

// Dev-only
type ReactDebugInfo = Array<{+name?: string}>;
Copy link
Contributor

Choose a reason for hiding this comment

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

Why Array? Could there be a collection with a size > 1 for a chunk?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Yea. For one chunk you can have multiple Server Components. Like a Server Component rendering another Server Component and so on. There will also be possible to have other steps inside like promises resolving. There will also be logs which has to be associated with the right component so order matters.

Basically all kinds of things that happened will be expressed in the order they happened.

@sebmarkbage sebmarkbage merged commit b229f54 into facebook:main Feb 8, 2024
36 checks passed
github-actions bot pushed a commit that referenced this pull request Feb 8, 2024
This adds a new DEV-only row type `D` for DebugInfo. If we see this in
prod, that's an error. It can contain extra debug information about the
Server Components (or Promises) that were compiled away during the
server render. It's DEV-only since this can contain sensitive
information (similar to errors) and since it'll be a lot of data, but
it's worth using the same stream for simplicity rather than a
side-channel.

In this first pass it's just the Server Component's name but I'll keep
adding more debug info to the stream, and it won't always just be a
Server Component's stack frame.

Each row can get more debug rows data streaming in as it resolves and
renders multiple server components in a row.

The data structure is just a side-channel and it would be perfectly fine
to ignore the D rows and it would behave the same as prod. With this
data structure though the data is associated with the row ID / chunk, so
you can't have inline meta data. This means that an inline Server
Component that doesn't get an ID otherwise will need to be outlined. The
way I outline Server Components is using a direct reference where it's
synchronous though so on the client side it behaves the same (i.e.
there's no lazy wrapper in this case).

In most cases the `_debugInfo` is on the Promises that we yield and we
also expose this on the `React.Lazy` wrappers. In the case where it's a
synchronous render it might attach this data to Elements or Arrays
(fragments) too.

In a future PR I'll wire this information up with Fiber to stash it in
the Fiber data structures so that DevTools can pick it up. This property
and the information in it is not limited to Server Components. The name
of the property that we look for probably shouldn't be `_debugInfo`
since it's semi-public. Should consider the name we use for that.

If it's a synchronous render that returns a string or number (text node)
then we don't have anywhere to attach them to. We could add a
`React.Lazy` wrapper for those but I chose to prioritize keeping the
data structure untouched. Can be useful if you use Server Components to
render data instead of React Nodes.

DiffTrain build for [b229f54](b229f54)
@sebmarkbage
Copy link
Collaborator Author

One thing I realized about this approach is that it’s sufficient for parent stacks but it doesn’t include owner information about elements inside a row. They may have a different owner and each one may have a different owner.

We may need to encode owner information on each element itself. Eg four argument. This needs to point to a server component though which means the meta data for knowing which one needs to be outlined.

EdisonVan pushed a commit to EdisonVan/react that referenced this pull request Apr 15, 2024
This adds a new DEV-only row type `D` for DebugInfo. If we see this in
prod, that's an error. It can contain extra debug information about the
Server Components (or Promises) that were compiled away during the
server render. It's DEV-only since this can contain sensitive
information (similar to errors) and since it'll be a lot of data, but
it's worth using the same stream for simplicity rather than a
side-channel.

In this first pass it's just the Server Component's name but I'll keep
adding more debug info to the stream, and it won't always just be a
Server Component's stack frame.

Each row can get more debug rows data streaming in as it resolves and
renders multiple server components in a row.

The data structure is just a side-channel and it would be perfectly fine
to ignore the D rows and it would behave the same as prod. With this
data structure though the data is associated with the row ID / chunk, so
you can't have inline meta data. This means that an inline Server
Component that doesn't get an ID otherwise will need to be outlined. The
way I outline Server Components is using a direct reference where it's
synchronous though so on the client side it behaves the same (i.e.
there's no lazy wrapper in this case).

In most cases the `_debugInfo` is on the Promises that we yield and we
also expose this on the `React.Lazy` wrappers. In the case where it's a
synchronous render it might attach this data to Elements or Arrays
(fragments) too.

In a future PR I'll wire this information up with Fiber to stash it in
the Fiber data structures so that DevTools can pick it up. This property
and the information in it is not limited to Server Components. The name
of the property that we look for probably shouldn't be `_debugInfo`
since it's semi-public. Should consider the name we use for that.

If it's a synchronous render that returns a string or number (text node)
then we don't have anywhere to attach them to. We could add a
`React.Lazy` wrapper for those but I chose to prioritize keeping the
data structure untouched. Can be useful if you use Server Components to
render data instead of React Nodes.
bigfootjon pushed a commit that referenced this pull request Apr 18, 2024
This adds a new DEV-only row type `D` for DebugInfo. If we see this in
prod, that's an error. It can contain extra debug information about the
Server Components (or Promises) that were compiled away during the
server render. It's DEV-only since this can contain sensitive
information (similar to errors) and since it'll be a lot of data, but
it's worth using the same stream for simplicity rather than a
side-channel.

In this first pass it's just the Server Component's name but I'll keep
adding more debug info to the stream, and it won't always just be a
Server Component's stack frame.

Each row can get more debug rows data streaming in as it resolves and
renders multiple server components in a row.

The data structure is just a side-channel and it would be perfectly fine
to ignore the D rows and it would behave the same as prod. With this
data structure though the data is associated with the row ID / chunk, so
you can't have inline meta data. This means that an inline Server
Component that doesn't get an ID otherwise will need to be outlined. The
way I outline Server Components is using a direct reference where it's
synchronous though so on the client side it behaves the same (i.e.
there's no lazy wrapper in this case).

In most cases the `_debugInfo` is on the Promises that we yield and we
also expose this on the `React.Lazy` wrappers. In the case where it's a
synchronous render it might attach this data to Elements or Arrays
(fragments) too.

In a future PR I'll wire this information up with Fiber to stash it in
the Fiber data structures so that DevTools can pick it up. This property
and the information in it is not limited to Server Components. The name
of the property that we look for probably shouldn't be `_debugInfo`
since it's semi-public. Should consider the name we use for that.

If it's a synchronous render that returns a string or number (text node)
then we don't have anywhere to attach them to. We could add a
`React.Lazy` wrapper for those but I chose to prioritize keeping the
data structure untouched. Can be useful if you use Server Components to
render data instead of React Nodes.

DiffTrain build for commit b229f54.
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