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 Reply] Encode ReadableStream and AsyncIterables #28893

Merged
merged 1 commit into from May 3, 2024

Conversation

sebmarkbage
Copy link
Collaborator

Same as #28847 but in the other direction.

Like other promises, this doesn't actually stream in the outgoing direction. It buffers until the stream is done. This is mainly due to our protocol remains compatible with Safari's lack of outgoing streams until recently.

However, the stream chunks are encoded as separate fields and so does support the busboy streaming on the receiving side.

@sebmarkbage sebmarkbage requested a review from gnoff April 23, 2024 01:44
@facebook-github-bot facebook-github-bot added CLA Signed React Core Team Opened by a member of the React Core Team labels Apr 23, 2024
@react-sizebot
Copy link

react-sizebot commented Apr 23, 2024

Comparing: 5fcfd71...a638699

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.66 kB 6.66 kB = 1.82 kB 1.82 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 492.61 kB 492.61 kB = 87.88 kB 87.88 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.67 kB 6.67 kB = 1.83 kB 1.83 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 498.86 kB 498.86 kB = 88.93 kB 88.93 kB
facebook-www/ReactDOM-prod.classic.js = 591.22 kB 591.22 kB = 103.96 kB 103.96 kB
facebook-www/ReactDOM-prod.modern.js = 567.44 kB 567.44 kB = 100.36 kB 100.36 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +8.23% 79.17 kB 85.69 kB +7.08% 16.24 kB 17.38 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +8.14% 80.05 kB 86.57 kB +7.00% 16.48 kB 17.63 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +8.12% 80.25 kB 86.77 kB +7.01% 16.46 kB 17.62 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +8.07% 80.79 kB 87.30 kB +6.91% 16.62 kB 17.77 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +7.75% 77.68 kB 83.70 kB +6.78% 16.16 kB 17.26 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.production.js +7.30% 82.48 kB 88.50 kB +6.40% 16.93 kB 18.01 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +7.22% 83.44 kB 89.46 kB +6.33% 17.14 kB 18.22 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.production.js +7.20% 83.58 kB 89.60 kB +6.39% 17.14 kB 18.24 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +7.12% 84.53 kB 90.55 kB +6.21% 17.37 kB 18.45 kB
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.production.js +7.06% 64.96 kB 69.55 kB +6.79% 14.09 kB 15.05 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +6.17% 156.62 kB 166.29 kB +5.19% 34.53 kB 36.33 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +6.10% 158.55 kB 168.22 kB +5.11% 35.06 kB 36.85 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +6.08% 159.07 kB 168.74 kB +5.11% 35.20 kB 37.00 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +6.02% 160.48 kB 170.15 kB +5.08% 35.56 kB 37.37 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js +5.68% 40.42 kB 42.72 kB +4.73% 8.46 kB 8.86 kB
oss-experimental/react-client/cjs/react-client-flight.production.js +5.63% 42.97 kB 45.39 kB +4.67% 8.41 kB 8.80 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +5.58% 81.77 kB 86.34 kB +5.05% 18.59 kB 19.53 kB
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +5.58% 81.78 kB 86.35 kB +5.16% 18.30 kB 19.24 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +5.56% 82.02 kB 86.59 kB +5.14% 18.37 kB 19.31 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +5.52% 154.14 kB 162.65 kB +4.79% 34.05 kB 35.68 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js +5.47% 41.96 kB 44.26 kB +4.47% 8.83 kB 9.23 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js +5.43% 42.30 kB 44.59 kB +4.38% 8.92 kB 9.31 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +5.35% 85.27 kB 89.84 kB +4.82% 19.34 kB 20.27 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +5.32% 85.78 kB 90.35 kB +4.76% 19.51 kB 20.44 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.development.js +5.31% 160.30 kB 168.81 kB +4.57% 35.06 kB 36.66 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +5.23% 162.59 kB 171.10 kB +4.56% 35.65 kB 37.28 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +5.22% 162.94 kB 171.45 kB +4.48% 35.88 kB 37.49 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +5.15% 165.23 kB 173.74 kB +4.47% 36.48 kB 38.11 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js +5.12% 44.81 kB 47.10 kB +4.03% 9.51 kB 9.89 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +5.09% 89.70 kB 94.26 kB +4.57% 20.40 kB 21.34 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +4.99% 91.48 kB 96.05 kB +4.46% 20.97 kB 21.91 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +4.99% 91.52 kB 96.08 kB +4.45% 21.00 kB 21.93 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.js +4.98% 46.06 kB 48.35 kB +3.86% 9.79 kB 10.17 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +4.98% 46.06 kB 48.35 kB +3.85% 9.79 kB 10.17 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +4.91% 92.92 kB 97.48 kB +4.36% 21.35 kB 22.28 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +4.91% 46.74 kB 49.03 kB +3.80% 9.96 kB 10.34 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +4.91% 92.94 kB 97.51 kB +4.35% 21.39 kB 22.32 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js +4.91% 46.75 kB 49.04 kB +3.80% 9.95 kB 10.32 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +4.86% 93.99 kB 98.55 kB +4.31% 21.55 kB 22.48 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +4.85% 94.01 kB 98.58 kB +4.30% 21.59 kB 22.52 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js +4.80% 47.77 kB 50.07 kB +3.77% 10.15 kB 10.54 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js +4.80% 47.78 kB 50.08 kB +3.76% 10.14 kB 10.52 kB
test_utils/ReactAllWarnings.js Deleted 64.26 kB 0.00 kB Deleted 16.02 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
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +8.23% 79.17 kB 85.69 kB +7.08% 16.24 kB 17.38 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +8.14% 80.05 kB 86.57 kB +7.00% 16.48 kB 17.63 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +8.12% 80.25 kB 86.77 kB +7.01% 16.46 kB 17.62 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +8.07% 80.79 kB 87.30 kB +6.91% 16.62 kB 17.77 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js +7.75% 77.68 kB 83.70 kB +6.78% 16.16 kB 17.26 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.production.js +7.30% 82.48 kB 88.50 kB +6.40% 16.93 kB 18.01 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +7.22% 83.44 kB 89.46 kB +6.33% 17.14 kB 18.22 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.production.js +7.20% 83.58 kB 89.60 kB +6.39% 17.14 kB 18.24 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +7.12% 84.53 kB 90.55 kB +6.21% 17.37 kB 18.45 kB
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.production.js +7.06% 64.96 kB 69.55 kB +6.79% 14.09 kB 15.05 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +6.17% 156.62 kB 166.29 kB +5.19% 34.53 kB 36.33 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +6.10% 158.55 kB 168.22 kB +5.11% 35.06 kB 36.85 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +6.08% 159.07 kB 168.74 kB +5.11% 35.20 kB 37.00 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +6.02% 160.48 kB 170.15 kB +5.08% 35.56 kB 37.37 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js +5.68% 40.42 kB 42.72 kB +4.73% 8.46 kB 8.86 kB
oss-experimental/react-client/cjs/react-client-flight.production.js +5.63% 42.97 kB 45.39 kB +4.67% 8.41 kB 8.80 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +5.58% 81.77 kB 86.34 kB +5.05% 18.59 kB 19.53 kB
oss-experimental/react-server-dom-esm/esm/react-server-dom-esm-client.browser.development.js +5.58% 81.78 kB 86.35 kB +5.16% 18.30 kB 19.24 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +5.56% 82.02 kB 86.59 kB +5.14% 18.37 kB 19.31 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js +5.52% 154.14 kB 162.65 kB +4.79% 34.05 kB 35.68 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js +5.47% 41.96 kB 44.26 kB +4.47% 8.83 kB 9.23 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js +5.43% 42.30 kB 44.59 kB +4.38% 8.92 kB 9.31 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +5.35% 85.27 kB 89.84 kB +4.82% 19.34 kB 20.27 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +5.32% 85.78 kB 90.35 kB +4.76% 19.51 kB 20.44 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.unbundled.development.js +5.31% 160.30 kB 168.81 kB +4.57% 35.06 kB 36.66 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.unbundled.development.js +5.23% 162.59 kB 171.10 kB +4.56% 35.65 kB 37.28 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +5.22% 162.94 kB 171.45 kB +4.48% 35.88 kB 37.49 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +5.15% 165.23 kB 173.74 kB +4.47% 36.48 kB 38.11 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js +5.12% 44.81 kB 47.10 kB +4.03% 9.51 kB 9.89 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +5.09% 89.70 kB 94.26 kB +4.57% 20.40 kB 21.34 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +4.99% 91.48 kB 96.05 kB +4.46% 20.97 kB 21.91 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +4.99% 91.52 kB 96.08 kB +4.45% 21.00 kB 21.93 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.js +4.98% 46.06 kB 48.35 kB +3.86% 9.79 kB 10.17 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +4.98% 46.06 kB 48.35 kB +3.85% 9.79 kB 10.17 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +4.91% 92.92 kB 97.48 kB +4.36% 21.35 kB 22.28 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +4.91% 46.74 kB 49.03 kB +3.80% 9.96 kB 10.34 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +4.91% 92.94 kB 97.51 kB +4.35% 21.39 kB 22.32 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js +4.91% 46.75 kB 49.04 kB +3.80% 9.95 kB 10.32 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +4.86% 93.99 kB 98.55 kB +4.31% 21.55 kB 22.48 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +4.85% 94.01 kB 98.58 kB +4.30% 21.59 kB 22.52 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js +4.80% 47.77 kB 50.07 kB +3.77% 10.15 kB 10.54 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js +4.80% 47.78 kB 50.08 kB +3.76% 10.14 kB 10.52 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js = 36.50 kB 36.39 kB = 8.21 kB 8.20 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js = 36.50 kB 36.39 kB = 8.21 kB 8.20 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js = 36.48 kB 36.38 kB = 8.22 kB 8.21 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js = 36.48 kB 36.38 kB = 8.22 kB 8.21 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js = 35.26 kB 35.16 kB = 8.01 kB 8.00 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js = 35.26 kB 35.16 kB = 8.01 kB 8.00 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js = 35.25 kB 35.15 kB = 8.02 kB 8.01 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js = 35.25 kB 35.15 kB = 8.02 kB 8.01 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js = 34.57 kB 34.47 kB = 7.85 kB 7.84 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js = 34.57 kB 34.47 kB = 7.85 kB 7.84 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.js = 34.57 kB 34.47 kB = 7.84 kB 7.83 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.js = 34.57 kB 34.47 kB = 7.84 kB 7.83 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js = 33.32 kB 33.22 kB = 7.57 kB 7.56 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js = 33.32 kB 33.22 kB = 7.57 kB 7.56 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js = 31.01 kB 30.91 kB = 7.03 kB 7.02 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js = 31.01 kB 30.91 kB = 7.03 kB 7.02 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js = 30.68 kB 30.57 kB = 6.95 kB 6.94 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js = 30.68 kB 30.57 kB = 6.95 kB 6.94 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js = 29.13 kB 29.03 kB = 6.58 kB 6.56 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js = 29.13 kB 29.03 kB = 6.58 kB 6.56 kB
oss-stable-semver/react-client/cjs/react-client-flight.production.js = 30.63 kB 30.52 kB = 6.51 kB 6.51 kB
oss-stable/react-client/cjs/react-client-flight.production.js = 30.63 kB 30.52 kB = 6.51 kB 6.51 kB
test_utils/ReactAllWarnings.js Deleted 64.26 kB 0.00 kB Deleted 16.02 kB 0.00 kB

Generated by 🚫 dangerJS against a638699

// Generators/Iterators are Iterables but they're also their own iterator
// functions. If that's the case, we treat them as single-shot. Otherwise,
// we assume that this iterable might be a multi-shot and allow it to be
// iterated more than once on the client.
Copy link
Collaborator

Choose a reason for hiding this comment

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

comment copy from the non-reply version?

@sebmarkbage sebmarkbage merged commit ec9400d into facebook:main May 3, 2024
2 of 3 checks passed
sebmarkbage added a commit that referenced this pull request May 8, 2024
Based on #28893.

For other streams we encode each chunk as a separate form field which is
a bit bloated. Especially for binary chunks since they also have an
indirection. We need some way to encode the chunks as separate anyway.
This way the streaming using busboy actually allows each chunk to stream
in over the network one at a time.

For binary streams the actual chunking is not important. The chunks can
be split and recombined in whatever size chunk makes sense.

Since we buffer the entire content anyway we can combine the chunks to
be consecutive. This PR does that with binary streams and also combine
them into a single Blob. That way there's no extra overhead when passing
through a binary stream.

Ideally, we'd be able to just use the stream from that one Blob but
Node.js doesn't return byob streams from Blob. Additionally, we don't
actually stream the content of Blobs due to the layering with busboy
atm. We could do that for binary streams in particular by replacing the
File layering with a stream and resolving each chunk as it comes in.
That could be a follow up.

If we stop buffering in the future, this set up still allows us to split
them and send other form fields in between while blocked since the
protocol is still the same.
github-actions bot pushed a commit that referenced this pull request May 8, 2024
Based on #28893.

For other streams we encode each chunk as a separate form field which is
a bit bloated. Especially for binary chunks since they also have an
indirection. We need some way to encode the chunks as separate anyway.
This way the streaming using busboy actually allows each chunk to stream
in over the network one at a time.

For binary streams the actual chunking is not important. The chunks can
be split and recombined in whatever size chunk makes sense.

Since we buffer the entire content anyway we can combine the chunks to
be consecutive. This PR does that with binary streams and also combine
them into a single Blob. That way there's no extra overhead when passing
through a binary stream.

Ideally, we'd be able to just use the stream from that one Blob but
Node.js doesn't return byob streams from Blob. Additionally, we don't
actually stream the content of Blobs due to the layering with busboy
atm. We could do that for binary streams in particular by replacing the
File layering with a stream and resolving each chunk as it comes in.
That could be a follow up.

If we stop buffering in the future, this set up still allows us to split
them and send other form fields in between while blocked since the
protocol is still the same.

DiffTrain build for [826bf4e](826bf4e)
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.

None yet

4 participants