Skip to content

Conversation

@unstubbable
Copy link
Collaborator

@unstubbable unstubbable commented Oct 6, 2025

Alternative to #34638, covering not only hanging promises, but also unresolved I/O. In fact, the stacks for hanging promises when aborting prerenders can already be fixed by defining a displayName for those promises, as enabled by #34825. Therefore this PR does not change anything about those, and just adds tests to confirm the expected behavior in the prerender abort case.

For unresolved I/O, we're adding special handling to the async_hooks tracking so that for aborted async functions (typically server components) we can find an unresolved await node that we can serialize as I/O node, and subsequently use for owner and component stacks, to indicate where the component suspended when the prerender was aborted.

@meta-cla meta-cla bot added the CLA Signed label Oct 6, 2025
@unstubbable unstubbable changed the title [Flight] Improve owner and components stacks when aborting [Flight] Improve owner and components stack when aborting Oct 6, 2025
@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label Oct 6, 2025
@unstubbable unstubbable changed the title [Flight] Improve owner and components stack when aborting [Flight] Improve owner and component stacks when aborting Oct 6, 2025
@unstubbable unstubbable force-pushed the improve-aborted-promise-stacks branch 2 times, most recently from 5e89b83 to b174161 Compare October 6, 2025 16:18
@react-sizebot
Copy link

react-sizebot commented Oct 6, 2025

Comparing: 5f2b571...6d836b3

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.22 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.49 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-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.50% 211.65 kB 212.71 kB +0.46% 38.66 kB 38.84 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.50% 211.65 kB 212.71 kB +0.46% 38.66 kB 38.84 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.49% 216.26 kB 217.32 kB +0.44% 39.49 kB 39.66 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.49% 218.16 kB 219.22 kB +0.47% 39.34 kB 39.52 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.49% 218.16 kB 219.22 kB +0.47% 39.34 kB 39.52 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.48% 222.77 kB 223.83 kB +0.42% 40.17 kB 40.34 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.47% 224.87 kB 225.93 kB +0.46% 40.41 kB 40.59 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.47% 224.87 kB 225.93 kB +0.46% 40.41 kB 40.59 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.47% 226.08 kB 227.14 kB +0.44% 40.71 kB 40.89 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.47% 226.08 kB 227.14 kB +0.44% 40.71 kB 40.89 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.47% 226.13 kB 227.19 kB +0.43% 40.71 kB 40.89 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.47% 226.13 kB 227.19 kB +0.43% 40.71 kB 40.89 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.46% 229.48 kB 230.54 kB +0.41% 41.24 kB 41.41 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.46% 230.69 kB 231.75 kB +0.41% 41.54 kB 41.71 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.46% 230.74 kB 231.80 kB +0.42% 41.54 kB 41.71 kB

Generated by 🚫 dangerJS against 6d836b3

@unstubbable unstubbable force-pushed the improve-aborted-promise-stacks branch 4 times, most recently from d785334 to 5454fe9 Compare October 10, 2025 14:44
@unstubbable unstubbable force-pushed the improve-aborted-promise-stacks branch 3 times, most recently from 70d31fe to d26ae68 Compare October 14, 2025 16:16
when scheduling prerendering and aborting in successive tasks using setImmediate
  ✕ includes deeper location for hanging promises
  ✓ includes deeper location for hanging promises in ignore-listed components
  ! includes deeper location for unresolved I/O (this one is flaky!)
when scheduling prerendering and aborting in successive tasks using setTimeout
  ✓ includes deeper location for hanging promises
  ✕ includes deeper location for hanging promises in ignore-listed components
  ✕ includes deeper location for unresolved I/O
@unstubbable unstubbable force-pushed the improve-aborted-promise-stacks branch from d26ae68 to 6d836b3 Compare October 14, 2025 18:16
@unstubbable
Copy link
Collaborator Author

Closing, because we consider the prerender abort approach inferior to

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.

3 participants