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] Allow String Chunks to Passthrough in Node streams and renderToMarkup #30131

Merged
merged 3 commits into from
Jul 3, 2024

Conversation

sebmarkbage
Copy link
Collaborator

@sebmarkbage sebmarkbage commented Jun 28, 2024

It can be efficient to accept raw string chunks to pass through a stream instead of encoding them into a binary copy first.

Previously our Flight parsers didn't accept receiving string chunks. That's partly because we sometimes need to encode binary chunks anyway so string only transport isn't enough but some chunks can be strings. This adds a partial ability for chunks to be received as strings.

However, accepting strings comes with some downsides. E.g. if the strings are split up we need to buffer it which compromises the perf for the common case. If the chunk represents binary data, then we'd need to encode it back into a typed array which would require a TextEncoder dependency in the parser. If the string chunk represents a byte length encoded string we don't know how many unicode characters to read without measuring them in terms of binary - also requiring a TextEncoder.

This PR is mainly intended for use for pass-through within the same memory. We can simplify the implementation by assuming that any string chunk is passed as the original chunk. This requires that the server stream config doesn't arbitrarily concatenate strings (e.g. large strings should not be concatenated which is probably a good heuristic anyway). It also means that this is not suitable to be used with for example receiving string chunks on the client by passing them through SSR hydration data - except if the encoding that way was only used with chunks that were already encoded as strings by Flight.

Web streams mostly just work on binary data anyway so they can't use this.

In Node.js streams we concatenate precomputed and small strings into larger buffers. It might make sense to do that using string ropes instead. However, in the meantime we can at least pass large strings that are outside our buffer view size as raw strings. There's no benefit to us eagerly encoding those.

Also, let Node accept string chunks as long as they're following our expected constraints. This lets us test the mixed protocol using pass-throughs. This can also be useful when the RSC server is in the same environment as the SSR server as they don't have to go from strings to typed arrays back to strings.

Now we can also use this in the pass-through used in renderToMarkup. This lets us avoid the dependency on TextDecoder/TextEncoder in that package.

…chunks

It can be efficient to accept raw string chunks to pass through a stream
instead of encoding them into a binary copy first.

However, to avoid having to deal with encoding them back to binary from the
parser itself, this helper is limited to dealing with unsplit and
unconcattened strings so that we can make some assumptions.

This is mainly intended for use for pass-through within the same memory.
Also, let Node accept string chunks as long as they're following our
expected constraints.

This lets us test the mixed protocol using pass-throughs.
This lets us avoid the dependency on TextDecoder/TextEncoder.
Copy link

vercel bot commented Jun 28, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
react-compiler-playground ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jun 28, 2024 10:02pm

@react-sizebot
Copy link

Comparing: 2e72ea8...1ceacb3

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 = 497.99 kB 497.99 kB = 89.27 kB 89.27 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 = 502.81 kB 502.81 kB = 89.97 kB 89.97 kB
facebook-www/ReactDOM-prod.classic.js = 597.08 kB 597.08 kB = 105.33 kB 105.33 kB
facebook-www/ReactDOM-prod.modern.js = 571.42 kB 571.42 kB = 101.27 kB 101.27 kB
oss-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +7.25% 51.30 kB 55.02 kB +4.56% 10.76 kB 11.25 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +7.25% 51.30 kB 55.02 kB +4.56% 10.76 kB 11.25 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +7.25% 51.30 kB 55.02 kB +4.56% 10.76 kB 11.25 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +7.18% 51.78 kB 55.50 kB +4.58% 10.83 kB 11.32 kB
oss-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +7.15% 51.98 kB 55.69 kB +4.49% 10.92 kB 11.41 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +7.15% 51.98 kB 55.69 kB +4.49% 10.92 kB 11.41 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +7.15% 51.98 kB 55.69 kB +4.49% 10.92 kB 11.41 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +7.08% 52.46 kB 56.18 kB +4.52% 10.99 kB 11.48 kB
oss-stable-rc/react-client/cjs/react-client-flight.production.js +5.40% 49.17 kB 51.82 kB +2.00% 9.45 kB 9.64 kB
oss-stable-semver/react-client/cjs/react-client-flight.production.js +5.40% 49.17 kB 51.82 kB +2.00% 9.45 kB 9.64 kB
oss-stable/react-client/cjs/react-client-flight.production.js +5.40% 49.17 kB 51.82 kB +2.00% 9.45 kB 9.64 kB
oss-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +5.37% 76.41 kB 80.51 kB +3.54% 14.43 kB 14.94 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +5.37% 76.41 kB 80.51 kB +3.54% 14.43 kB 14.94 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +5.37% 76.41 kB 80.51 kB +3.54% 14.43 kB 14.94 kB
oss-experimental/react-client/cjs/react-client-flight.production.js +5.35% 49.57 kB 52.22 kB +2.02% 9.50 kB 9.69 kB
oss-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +5.32% 77.19 kB 81.30 kB +3.50% 14.62 kB 15.13 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +5.32% 77.19 kB 81.30 kB +3.50% 14.62 kB 15.13 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +5.32% 77.19 kB 81.30 kB +3.50% 14.62 kB 15.13 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +5.10% 82.48 kB 86.69 kB +3.33% 15.87 kB 16.40 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +5.05% 83.27 kB 87.47 kB +3.30% 16.04 kB 16.57 kB
oss-stable-rc/react-client/cjs/react-client-flight.development.js +4.83% 69.97 kB 73.36 kB +2.36% 13.07 kB 13.38 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js +4.83% 69.97 kB 73.36 kB +2.36% 13.07 kB 13.38 kB
oss-stable/react-client/cjs/react-client-flight.development.js +4.83% 69.97 kB 73.36 kB +2.36% 13.07 kB 13.38 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +4.58% 76.11 kB 79.60 kB +2.13% 14.52 kB 14.82 kB
test_utils/ReactAllWarnings.js Deleted 62.88 kB 0.00 kB Deleted 15.69 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-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +7.25% 51.30 kB 55.02 kB +4.56% 10.76 kB 11.25 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +7.25% 51.30 kB 55.02 kB +4.56% 10.76 kB 11.25 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +7.25% 51.30 kB 55.02 kB +4.56% 10.76 kB 11.25 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.production.js +7.18% 51.78 kB 55.50 kB +4.58% 10.83 kB 11.32 kB
oss-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +7.15% 51.98 kB 55.69 kB +4.49% 10.92 kB 11.41 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +7.15% 51.98 kB 55.69 kB +4.49% 10.92 kB 11.41 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +7.15% 51.98 kB 55.69 kB +4.49% 10.92 kB 11.41 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +7.08% 52.46 kB 56.18 kB +4.52% 10.99 kB 11.48 kB
oss-stable-rc/react-client/cjs/react-client-flight.production.js +5.40% 49.17 kB 51.82 kB +2.00% 9.45 kB 9.64 kB
oss-stable-semver/react-client/cjs/react-client-flight.production.js +5.40% 49.17 kB 51.82 kB +2.00% 9.45 kB 9.64 kB
oss-stable/react-client/cjs/react-client-flight.production.js +5.40% 49.17 kB 51.82 kB +2.00% 9.45 kB 9.64 kB
oss-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +5.37% 76.41 kB 80.51 kB +3.54% 14.43 kB 14.94 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +5.37% 76.41 kB 80.51 kB +3.54% 14.43 kB 14.94 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +5.37% 76.41 kB 80.51 kB +3.54% 14.43 kB 14.94 kB
oss-experimental/react-client/cjs/react-client-flight.production.js +5.35% 49.57 kB 52.22 kB +2.02% 9.50 kB 9.69 kB
oss-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +5.32% 77.19 kB 81.30 kB +3.50% 14.62 kB 15.13 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +5.32% 77.19 kB 81.30 kB +3.50% 14.62 kB 15.13 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +5.32% 77.19 kB 81.30 kB +3.50% 14.62 kB 15.13 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.unbundled.development.js +5.10% 82.48 kB 86.69 kB +3.33% 15.87 kB 16.40 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +5.05% 83.27 kB 87.47 kB +3.30% 16.04 kB 16.57 kB
oss-stable-rc/react-client/cjs/react-client-flight.development.js +4.83% 69.97 kB 73.36 kB +2.36% 13.07 kB 13.38 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js +4.83% 69.97 kB 73.36 kB +2.36% 13.07 kB 13.38 kB
oss-stable/react-client/cjs/react-client-flight.development.js +4.83% 69.97 kB 73.36 kB +2.36% 13.07 kB 13.38 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +4.58% 76.11 kB 79.60 kB +2.13% 14.52 kB 14.82 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.39% 76.13 kB 76.43 kB +0.07% 14.52 kB 14.53 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.38% 77.98 kB 78.27 kB +0.05% 14.92 kB 14.93 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.37% 78.43 kB 78.72 kB +0.06% 15.05 kB 15.06 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.36% 81.07 kB 81.36 kB +0.06% 15.53 kB 15.54 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +0.36% 82.48 kB 82.77 kB +0.04% 15.86 kB 15.87 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.35% 83.28 kB 83.57 kB +0.06% 16.02 kB 16.03 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.35% 84.65 kB 84.94 kB +0.07% 16.31 kB 16.32 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.35% 84.66 kB 84.95 kB +0.06% 16.29 kB 16.30 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js +0.32% 46.33 kB 46.48 kB = 9.54 kB 9.53 kB
oss-stable-rc/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.31% 70.06 kB 70.28 kB +0.10% 13.02 kB 13.03 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.31% 70.06 kB 70.28 kB +0.10% 13.02 kB 13.03 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.development.js +0.31% 70.06 kB 70.28 kB +0.10% 13.02 kB 13.03 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js +0.31% 47.92 kB 48.07 kB = 9.90 kB 9.90 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js +0.31% 48.26 kB 48.41 kB = 9.99 kB 9.99 kB
oss-stable-rc/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.31% 71.90 kB 72.12 kB +0.04% 13.41 kB 13.42 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.31% 71.90 kB 72.12 kB +0.04% 13.41 kB 13.42 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +0.31% 71.90 kB 72.12 kB +0.04% 13.41 kB 13.42 kB
oss-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.30% 72.36 kB 72.58 kB +0.04% 13.54 kB 13.54 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.30% 72.36 kB 72.58 kB +0.04% 13.54 kB 13.54 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +0.30% 72.36 kB 72.58 kB +0.04% 13.54 kB 13.54 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js +0.30% 50.53 kB 50.68 kB = 10.54 kB 10.54 kB
oss-stable-rc/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.29% 75.00 kB 75.22 kB +0.07% 14.11 kB 14.12 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.29% 75.00 kB 75.22 kB +0.07% 14.11 kB 14.12 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.development.js +0.29% 75.00 kB 75.22 kB +0.07% 14.11 kB 14.12 kB
oss-stable-rc/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js +0.29% 45.84 kB 45.97 kB = 9.46 kB 9.46 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js +0.29% 45.84 kB 45.97 kB = 9.46 kB 9.46 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.browser.production.js +0.29% 45.84 kB 45.97 kB = 9.46 kB 9.46 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.js +0.29% 51.78 kB 51.93 kB = 10.82 kB 10.82 kB
oss-stable-rc/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +0.29% 76.40 kB 76.62 kB +0.01% 14.43 kB 14.43 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +0.29% 76.40 kB 76.62 kB +0.01% 14.43 kB 14.43 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.development.js +0.29% 76.40 kB 76.62 kB +0.01% 14.43 kB 14.43 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js +0.29% 52.47 kB 52.62 kB = 10.98 kB 10.97 kB
oss-stable-rc/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.28% 77.21 kB 77.43 kB +0.03% 14.60 kB 14.61 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.28% 77.21 kB 77.43 kB +0.03% 14.60 kB 14.61 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +0.28% 77.21 kB 77.43 kB +0.03% 14.60 kB 14.61 kB
oss-stable-rc/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js +0.28% 47.44 kB 47.57 kB = 9.83 kB 9.83 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js +0.28% 47.44 kB 47.57 kB = 9.83 kB 9.83 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js +0.28% 47.44 kB 47.57 kB = 9.83 kB 9.83 kB
oss-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js +0.28% 47.77 kB 47.91 kB = 9.92 kB 9.92 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js +0.28% 47.77 kB 47.91 kB = 9.92 kB 9.92 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js +0.28% 47.77 kB 47.91 kB = 9.92 kB 9.92 kB
oss-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.28% 78.57 kB 78.79 kB +0.05% 14.84 kB 14.85 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.28% 78.57 kB 78.79 kB +0.05% 14.84 kB 14.85 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +0.28% 78.57 kB 78.79 kB +0.05% 14.84 kB 14.85 kB
oss-stable-rc/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.28% 78.59 kB 78.81 kB +0.05% 14.82 kB 14.83 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.28% 78.59 kB 78.81 kB +0.05% 14.82 kB 14.83 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +0.28% 78.59 kB 78.81 kB +0.05% 14.82 kB 14.83 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js +0.28% 53.62 kB 53.77 kB = 11.20 kB 11.20 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js +0.28% 53.63 kB 53.78 kB = 11.19 kB 11.19 kB
oss-stable-rc/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js +0.27% 50.05 kB 50.18 kB = 10.48 kB 10.48 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js +0.27% 50.05 kB 50.18 kB = 10.48 kB 10.48 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-client.node.production.js +0.27% 50.05 kB 50.18 kB = 10.48 kB 10.48 kB
oss-stable-rc/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.js +0.26% 51.30 kB 51.43 kB = 10.76 kB 10.75 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.js +0.26% 51.30 kB 51.43 kB = 10.76 kB 10.75 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.unbundled.production.js +0.26% 51.30 kB 51.43 kB = 10.76 kB 10.75 kB
oss-stable-rc/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js +0.26% 51.99 kB 52.12 kB = 10.91 kB 10.91 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js +0.26% 51.99 kB 52.12 kB = 10.91 kB 10.91 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js +0.26% 51.99 kB 52.12 kB = 10.91 kB 10.91 kB
oss-stable-rc/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js +0.25% 53.13 kB 53.27 kB = 11.13 kB 11.13 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js +0.25% 53.13 kB 53.27 kB = 11.13 kB 11.13 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js +0.25% 53.13 kB 53.27 kB = 11.13 kB 11.13 kB
oss-stable-rc/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js +0.25% 53.14 kB 53.28 kB = 11.12 kB 11.12 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js +0.25% 53.14 kB 53.28 kB = 11.12 kB 11.12 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js +0.25% 53.14 kB 53.28 kB = 11.12 kB 11.12 kB
oss-experimental/react-html/cjs/react-html.react-server.development.js = 476.81 kB 475.46 kB = 86.29 kB 85.95 kB
oss-experimental/react-html/cjs/react-html.react-server.production.js = 298.88 kB 297.76 kB = 56.51 kB 56.15 kB
test_utils/ReactAllWarnings.js Deleted 62.88 kB 0.00 kB Deleted 15.69 kB 0.00 kB

Generated by 🚫 dangerJS against 1ceacb3

@@ -75,12 +75,10 @@ export function renderToMarkup(
options?: MarkupOptions,
): Promise<string> {
return new Promise((resolve, reject) => {
const textEncoder = new TextEncoder();
const flightDestination = {
push(chunk: string | null): boolean {
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

We currently only encode strings in these streams because there's no reason to send any binary data to the "client". However, if we enabled Blobs to be used inside e.g. <img src> as planned, then there would be reason to do that and we can enable the stream config to allow pushing raw binary chunks and receive them here using processBinaryChunk.

@sebmarkbage sebmarkbage merged commit 6e169fc into facebook:main Jul 3, 2024
139 checks passed
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