8000 [Flight] Prevent serialized size leaking across requests by eps1lon · Pull Request #33121 · facebook/react · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

[Flight] Prevent serialized size leaking across requests #33121

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
May 5, 2025

Conversation

eps1lon
Copy link
Collaborator
@eps1lon eps1lon commented May 5, 2025

Summary

Follow-up to #33030. We end up not starting with emitChunk when we retry deferred text and therefore didn't stash and restore the initial size.

Now we stash and restore in retryTask as well to cover that case. tryStreamTask immediately goes into emitChunk which already takes care of stash+restore.

How did you test this change?

  • added test
  • monitored serializedSize value across requests in flight fixture (we ended up leaking 13 for each request i.e. deferred text.length)

@eps1lon eps1lon requested a review from sebmarkbage May 5, 2025 13:10
@github-actions github-actions bot added the React Core Team Opened by a member of the React Core Team label May 5, 2025
@react-sizebot
Copy link
react-sizebot commented May 5, 2025

Comparing: 0ca8420...f220f7e

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 = 528.27 kB 528.27 kB = 93.14 kB 93.14 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 = 633.90 kB 633.90 kB = 111.33 kB 111.33 kB
facebook-www/ReactDOM-prod.classic.js = 671.68 kB 671.68 kB = 117.77 kB 117.77 kB
facebook-www/ReactDOM-prod.modern.js = 661.96 kB 661.96 kB = 116.21 kB 116.21 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.production.js +0.85% 58.29 kB 58.78 kB +0.75% 11.69 kB 11.78 kB
oss-stable/react-server/cjs/react-server-flight.production.js +0.85% 58.29 kB 58.78 kB +0.75% 11.69 kB 11.78 kB
oss-experimental/react-server/cjs/react-server-flight.production.js +0.78% 63.29 kB 63.79 kB +0.83% 12.57 kB 12.68 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js +0.56% 86.69 kB 87.18 kB +0.48% 18.05 kB 18.14 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js +0.56% 86.69 kB 87.18 kB +0.48% 18.05 kB 18.14 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js +0.55% 88.13 kB 88.62 kB +0.47% 18.37 kB 18.46 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js +0.55% 88.13 kB 88.62 kB +0.47% 18.37 kB 18.46 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +0.54% 90.16 kB 90.65 kB +0.47% 18.79 kB 18.88 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +0.54% 90.16 kB 90.65 kB +0.47% 18.79 kB 18.88 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.production.js +0.54% 90.19 kB 90.68 kB +0.51% 18.81 kB 18.90 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.production.js +0.54% 90.19 kB 90.68 kB +0.51% 18.81 kB 18.90 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js +0.54% 91.29 kB 91.78 kB +0.51% 18.81 kB 18.90 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js +0.53% 92.82 kB 93.31 kB +0.48% 19.14 kB 19.23 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +0.52% 93.61 kB 94.09 kB +0.47% 19.15 kB 19.24 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +0.52% 93.61 kB 94.09 kB +0.47% 19.15 kB 19.24 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +0.52% 94.02 kB 94.51 kB +0.45% 19.26 kB 19.35 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +0.52% 94.02 kB 94.51 kB +0.45% 19.26 kB 19.35 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +0.52% 94.71 kB 95.20 kB +0.50% 19.54 kB 19.64 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.production.js +0.52% 94.74 kB 95.23 kB +0.48% 19.56 kB 19.65 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +0.51% 95.05 kB 95.54 kB +0.43% 19.49 kB 19.58 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +0.51% 95.05 kB 95.54 kB +0.43% 19.49 kB 19.58 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +0.51% 95.07 kB 95.56 kB +0.46% 19.48 kB 19.57 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +0.51% 95.07 kB 95.56 kB +0.46% 19.48 kB 19.57 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.production.js +0.51% 96.13 kB 96.62 kB +0.42% 19.73 kB 19.82 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.production.js +0.51% 96.13 kB 96.62 kB +0.42% 19.73 kB 19.82 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +0.50% 97.13 kB 97.62 kB +0.44% 19.94 kB 20.03 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +0.50% 97.13 kB 97.62 kB +0.44% 19.94 kB 20.03 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +0.50% 97.18 kB 97.67 kB +0.42% 19.96 kB 20.04 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +0.50% 97.18 kB 97.67 kB +0.42% 19.96 kB 20.04 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +0.50% 98.21 kB 98.70 kB +0.73% 19.94 kB 20.08 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +0.50% 98.62 kB 99.11 kB +0.47% 20.09 kB 20.18 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +0.49% 99.74 kB 100.23 kB +0.46% 20.36 kB 20.45 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +0.49% 99.75 kB 100.24 kB +0.47% 20.35 kB 20.44 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.production.js +0.49% 100.68 kB 101.17 kB +0.48% 20.49 kB 20.59 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +0.48% 101.68 kB 102.17 kB +0.73% 20.71 kB 20.86 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +0.48% 101.74 kB 102.23 kB +0.49% 20.77 kB 20.88 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js +0.38% 101.27 kB 101.66 kB +0.18% 18.85 kB 18.88 kB
oss-stable/react-server/cjs/react-server-flight.development.js +0.38% 101.27 kB 101.66 kB +0.18% 18.85 kB 18.88 kB
oss-experimental/react-server/cjs/react-server-flight.development.js +0.36% 108.10 kB 108.48 kB +0.17% 20.05 kB 20.08 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.27% 140.16 kB 140.54 kB +0.09% 26.08 kB 26.10 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.27% 140.16 kB 140.54 kB +0.09% 26.08 kB 26.10 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.27% 143.98 kB 144.37 kB +0.12% 26.70 kB 26.73 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.27% 143.98 kB 144.37 kB +0.12% 26.70 kB 26.73 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.27% 144.57 kB 144.95 kB +0.10% 26.97 kB 27.00 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.27% 144.57 kB 144.95 kB +0.10% 26.97 kB 27.00 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.27% 144.59 kB 144.97 kB +0.10% 26.94 kB 26.97 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js +0.27% 144.59 kB 144.97 kB +0.10% 26.94 kB 26.97 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js +0.26% 147.00 kB 147.38 kB +0.11% 27.25 kB 27.28 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.26% 147.90 kB 148.28 kB +0.09% 27.39 kB 27.41 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.26% 147.90 kB 148.28 kB +0.09% 27.39 kB 27.41 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.26% 148.44 kB 148.82 kB +0.09% 27.52 kB 27.54 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.26% 148.44 kB 148.82 kB +0.09% 27.52 kB 27.54 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js +0.25% 151.46 kB 151.85 kB +0.10% 27.98 kB 28.01 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +0.25% 151.70 kB 152.09 kB +0.09% 28.24 kB 28.26 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node. 8000 development.js +0.25% 151.73 kB 152.11 kB +0.09% 28.25 kB 28.28 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.25% 151.26 kB 151.64 kB +0.09% 28.01 kB 28.04 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.25% 151.26 kB 151.64 kB +0.09% 28.01 kB 28.04 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.25% 151.73 kB 152.12 kB +0.11% 28.02 kB 28.05 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.25% 151.73 kB 152.12 kB +0.11% 28.02 kB 28.05 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.25% 151.76 kB 152.14 kB +0.11% 28.01 kB 28.04 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.25% 151.76 kB 152.14 kB +0.11% 28.01 kB 28.04 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.25% 152.40 kB 152.78 kB +0.11% 28.29 kB 28.32 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.25% 152.40 kB 152.78 kB +0.11% 28.29 kB 28.32 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.25% 152.46 kB 152.85 kB +0.11% 28.30 kB 28.33 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.25% 152.46 kB 152.85 kB +0.11% 28.30 kB 28.33 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +0.25% 154.74 kB 155.12 kB +0.12% 28.62 kB 28.66 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +0.25% 155.28 kB 155.67 kB +0.11% 28.75 kB 28.78 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +0.24% 158.40 kB 158.78 kB +0.11% 29.31 kB 29.35 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +0.24% 159.21 kB 159.60 kB +0.10% 29.36 kB 29.39 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +0.24% 159.24 kB 159.62 kB +0.09% 29.36 kB 29.38 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +0.24% 159.54 kB 159.92 kB +0.11% 29.60 kB 29.63 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +0.24% 159.60 kB 159.99 kB +0.10% 29.61 kB 29.64 kB

Generated by 🚫 dangerJS against f220f7e

@sebmarkbage
Copy link
Collaborator

You should remove it from emitChunk and add it around tryStreamTask too (the only other place emitChunk is called). Basically it needs to hoist out one level for consistence. Because otherwise emitChunk will shadow it and so any next line after it won't observe the inner ones. Currently it's called at the end so doesn't matter but that might change.

@eps1lon
Copy link
Collaborator Author
eps1lon commented May 5, 2025

You should remove it from emitChunk and add it around tryStreamTask too (the only other place emitChunk is called).

I thought that was intentionally around emitChunk because emitChunk can be recursive.

@sebmarkbage
Copy link
Collaborator

emitChunk can't be recursive can it?

@eps1lon
Copy link
Collaborator Author
eps1lon commented May 5, 2025

emitChunk can't be recursive can it?

emitChunk (react-server-dom-webpack-server.node.unbundled.development.js:2590)
retryTask (react-server-dom-webpack-server.node.unbundled.development.js:2670)
outlineModel (react-server-dom-webpack-server.node.unbundled.development.js:1618)
serializeServerReference (react-server-dom-webpack-server.node.unbundled.development.js:1646)
renderModelDestructive (react-server-dom-webpack-server.node.unbundled.development.js:2038)
renderModel (react-server-dom-webpack-server.node.unbundled.development.js:1724)
toJSON (react-server-dom-webpack-server.node.unbundled.development.js:1512)
emitChunk (react-server-dom-webpack-server.node.unbundled.development.js:2621)

CleanShot 2025-05-05 at 16 57 15

You can repro that in the Flight fixture.

@eps1lon
Copy link
Collaborator Author
eps1lon commented May 5, 2025

But it's still around retryTask so this should be fine.

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
0