Skip to content

[Flight] Encode ReactIOInfo as its own row type #33390

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

Merged
merged 2 commits into from
Jun 3, 2025

Conversation

sebmarkbage
Copy link
Collaborator

@sebmarkbage sebmarkbage commented May 31, 2025

Stacked on #33388.

This encodes the I/O entries as their own row type ("J"). This makes it possible to parse them directly without first parsing the debug info for each component. E.g. if you're just interested in logging the I/O without all the places it was awaited.

This is not strictly necessary since the debug info is also readily available without parsing the actual trees. (That's how the Server Components Performance Track works.) However, we might want to exclude this information in profiling builds while retaining some limited form of I/O tracking.

It also allows for logging side-effects that are not awaited if we wanted to.

@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label May 31, 2025
@react-sizebot
Copy link

react-sizebot commented May 31, 2025

Comparing: acee65d...2bb69bd

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.11% 1.83 kB 1.83 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 529.82 kB 529.82 kB = 93.51 kB 93.51 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 = 650.91 kB 650.91 kB = 114.63 kB 114.63 kB
facebook-www/ReactDOM-prod.classic.js = 675.86 kB 675.86 kB = 118.91 kB 118.91 kB
facebook-www/ReactDOM-prod.modern.js = 666.14 kB 666.14 kB = 117.30 kB 117.30 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 +1.14% 147.74 kB 149.42 kB +0.89% 34.70 kB 35.01 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +1.06% 109.16 kB 110.32 kB +0.92% 20.65 kB 20.84 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.browser.development.js +1.06% 109.52 kB 110.68 kB +0.91% 20.59 kB 20.78 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +1.05% 110.81 kB 111.97 kB +0.89% 20.42 kB 20.60 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +1.04% 111.35 kB 112.51 kB +0.90% 21.04 kB 21.23 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +1.03% 111.91 kB 113.06 kB +0.86% 21.19 kB 21.37 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.node.development.js +1.02% 113.25 kB 114.41 kB +0.77% 21.41 kB 21.58 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +1.02% 113.76 kB 114.92 kB +0.75% 21.44 kB 21.60 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-client.edge.development.js +1.01% 115.05 kB 116.21 kB +0.82% 21.78 kB 21.96 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.99% 116.40 kB 117.56 kB +0.73% 21.92 kB 22.08 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.98% 118.15 kB 119.30 kB +0.77% 22.28 kB 22.45 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.98% 118.24 kB 119.39 kB +0.77% 22.32 kB 22.49 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +0.97% 119.14 kB 120.30 kB +0.73% 22.19 kB 22.36 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +0.96% 120.47 kB 121.63 kB +0.72% 22.45 kB 22.61 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js +0.49% 106.61 kB 107.13 kB +0.39% 19.87 kB 19.95 kB
oss-stable/react-server/cjs/react-server-flight.development.js +0.49% 106.61 kB 107.13 kB +0.39% 19.87 kB 19.95 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +0.43% 113.68 kB 114.17 kB +0.45% 21.08 kB 21.18 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.36% 145.50 kB 146.02 kB +0.26% 27.10 kB 27.17 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.36% 145.50 kB 146.02 kB +0.26% 27.10 kB 27.17 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.35% 149.07 kB 149.59 kB +0.25% 27.62 kB 27.69 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.35% 149.07 kB 149.59 kB +0.25% 27.62 kB 27.69 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.34% 153.24 kB 153.76 kB +0.25% 28.43 kB 28.50 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.34% 153.24 kB 153.76 kB +0.25% 28.43 kB 28.50 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.34% 153.78 kB 154.30 kB +0.24% 28.57 kB 28.64 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.34% 153.78 kB 154.30 kB +0.24% 28.57 kB 28.64 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.33% 156.82 kB 157.34 kB +0.22% 28.97 kB 29.03 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.33% 156.82 kB 157.34 kB +0.22% 28.97 kB 29.03 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.33% 156.84 kB 157.36 kB +0.22% 28.97 kB 29.03 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.33% 156.84 kB 157.36 kB +0.22% 28.97 kB 29.03 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.33% 149.90 kB 150.39 kB +0.22% 27.95 kB 28.01 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.33% 149.90 kB 150.39 kB +0.22% 27.95 kB 28.01 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.33% 149.92 kB 150.41 kB +0.24% 27.92 kB 27.99 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.33% 149.92 kB 150.41 kB +0.24% 27.92 kB 27.99 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.32% 152.58 kB 153.07 kB +0.31% 28.32 kB 28.40 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.32% 156.50 kB 156.99 kB +0.24% 28.88 kB 28.95 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.31% 156.59 kB 157.08 kB +0.20% 29.05 kB 29.11 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.31% 156.59 kB 157.08 kB +0.20% 29.05 kB 29.11 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.31% 157.73 kB 158.22 kB +0.20% 29.32 kB 29.38 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.31% 157.73 kB 158.22 kB +0.20% 29.32 kB 29.38 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.31% 157.79 kB 158.28 kB +0.20% 29.33 kB 29.39 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.31% 157.79 kB 158.28 kB +0.20% 29.33 kB 29.39 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.31% 160.32 kB 160.81 kB +0.25% 29.70 kB 29.77 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.31% 160.86 kB 161.35 kB +0.24% 29.82 kB 29.90 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.30% 164.25 kB 164.74 kB +0.22% 30.24 kB 30.31 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.30% 164.27 kB 164.77 kB +0.23% 30.24 kB 30.31 kB
oss-experimental/react-markup/cjs/react-markup.react-server.development.js +0.29% 573.86 kB 575.52 kB +0.27% 102.60 kB 102.87 kB
oss-stable-semver/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +0.26% 136.01 kB 136.36 kB +0.35% 31.83 kB 31.94 kB
oss-stable/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +0.26% 136.03 kB 136.38 kB +0.35% 31.85 kB 31.96 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.24% 162.54 kB 162.93 kB +0.18% 30.30 kB 30.35 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.24% 162.57 kB 162.96 kB +0.21% 30.29 kB 30.36 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.23% 169.24 kB 169.63 kB +0.17% 31.40 kB 31.46 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.23% 170.38 kB 170.76 kB +0.21% 31.68 kB 31.75 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.23% 170.44 kB 170.83 kB +0.21% 31.69 kB 31.76 kB

Generated by 🚫 dangerJS against 2bb69bd

@sebmarkbage sebmarkbage merged commit 3fb17d1 into facebook:main Jun 3, 2025
14 of 16 checks passed
sebmarkbage added a commit that referenced this pull request Jun 3, 2025
)

Stacked on #33390.

The stack trace doesn't include the thing you called when calling into
ignore listed content. We consider the ignore listed content
conceptually the abstraction that you called that's interesting.

This extracts the name of the first ignore listed function that was
called from user space. For example `"fetch"`. So we can know what kind
of request this is.

This could be enhanced and tweaked with heuristics in the future. For
example, when you create a Promise yourself and call I/O inside of it
like my `delay` examples, then we use that Promise as the I/O node but
its stack doesn't have the actual I/O performed. It might be better to
use the inner I/O node in that case. E.g. `setTimeout`. Currently I pick
the name from the first party code instead - in my example `delay`.

Another case that could be improved is the case where your whole
component is third-party. In that case we still log the I/O but it has
no context about what kind of I/O since the whole stack is ignored it
just gets the component name for example. We could for example look at
the first name that is in a different package than the package name of
the ignored listed component. So if
`node_modules/my-component-library/index.js` calls into
`node_modules/mysql/connection.js` then we could use the name from the
inner.
github-actions bot pushed a commit to code/lib-react that referenced this pull request Jun 3, 2025
Stacked on facebook#33388.

This encodes the I/O entries as their own row type (`"J"`). This makes
it possible to parse them directly without first parsing the debug info
for each component. E.g. if you're just interested in logging the I/O
without all the places it was awaited.

This is not strictly necessary since the debug info is also readily
available without parsing the actual trees. (That's how the Server
Components Performance Track works.) However, we might want to exclude
this information in profiling builds while retaining some limited form
of I/O tracking.

It also allows for logging side-effects that are not awaited if we
wanted to.

DiffTrain build for [3fb17d1](facebook@3fb17d1)
github-actions bot pushed a commit to code/lib-react that referenced this pull request Jun 3, 2025
Stacked on facebook#33388.

This encodes the I/O entries as their own row type (`"J"`). This makes
it possible to parse them directly without first parsing the debug info
for each component. E.g. if you're just interested in logging the I/O
without all the places it was awaited.

This is not strictly necessary since the debug info is also readily
available without parsing the actual trees. (That's how the Server
Components Performance Track works.) However, we might want to exclude
this information in profiling builds while retaining some limited form
of I/O tracking.

It also allows for logging side-effects that are not awaited if we
wanted to.

DiffTrain build for [3fb17d1](facebook@3fb17d1)
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