react icon indicating copy to clipboard operation
react copied to clipboard

[Flight] Implement FlightClient in terms of Thenable/Promises instead of throwing Promises

Open sebmarkbage opened this issue 1 year ago • 1 comments

This moves the Flight Client's to use Chunks that mimick a variant of Promises instead of relying on throwing Promises. It still throws Promises in the bounds (readRoot and the generate React.lazy init) but that can be removed in a follow up.

There are a number of things that I'm not too happy about in this implementation:

The Webpack plugin isn't quite ideal. Not sure if that should even use the status fields.

There is a somewhat of an edge case where a model can reference a module that is still loading. Modules are the only external resource that we're blocked on. This then can turn other models to become blocked too. This was pretty simple but inefficient before. It would just throw and reparse the model every time something pinged. Which was fine because it's an edge case that you use it and even more so that the module isn't already resolved.

The Chunks extend Promise but they're not actually compatible because the the then() doesn't return another Promise. Similarly, there's no way to lazy initialize without allocating and adding a listener at the same time even though it can synchronously resolve. If we have added listeners before, there's no way to ping and only if it's actually read then initialize it.

I'm also not sure if I'm over optimizing over being able to use the built-in Promises more.

It's just way more code.

sebmarkbage avatar Sep 14 '22 04:09 sebmarkbage

Comparing: c91a1e03be54733a7dbfcb5663d7a9e8606ab1c1...1c481e9873fb5460b2fa050c78ddb2ef49dd6585

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.min.js = 135.04 kB 135.05 kB = 43.32 kB 43.32 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js = 142.50 kB 142.51 kB = 45.52 kB 45.53 kB
facebook-www/ReactDOM-prod.classic.js = 489.87 kB 489.88 kB = 87.22 kB 87.21 kB
facebook-www/ReactDOM-prod.modern.js = 475.18 kB 475.19 kB = 84.97 kB 84.97 kB
facebook-www/ReactDOMForked-prod.classic.js = 489.87 kB 489.88 kB = 87.22 kB 87.21 kB
facebook-relay/flight/ReactFlightNativeRelayClient-prod.js +69.32% 6.20 kB 10.50 kB +43.54% 1.87 kB 2.68 kB
facebook-www/ReactFlightDOMRelayClient-prod.classic.js +69.09% 6.21 kB 10.49 kB +43.31% 1.87 kB 2.68 kB
facebook-www/ReactFlightDOMRelayClient-prod.modern.js +69.09% 6.21 kB 10.49 kB +43.31% 1.87 kB 2.68 kB
facebook-www/ReactFlightDOMRelayClient-dev.classic.js +53.99% 11.19 kB 17.23 kB +37.17% 3.26 kB 4.47 kB
facebook-www/ReactFlightDOMRelayClient-dev.modern.js +53.99% 11.19 kB 17.23 kB +37.17% 3.26 kB 4.47 kB
facebook-relay/flight/ReactFlightNativeRelayClient-dev.js +53.58% 11.26 kB 17.30 kB +36.93% 3.27 kB 4.48 kB
oss-experimental/react-client/cjs/react-client-flight.production.min.js +47.56% 3.75 kB 5.53 kB +29.42% 1.71 kB 2.22 kB
oss-stable-semver/react-client/cjs/react-client-flight.production.min.js +47.56% 3.75 kB 5.53 kB +29.42% 1.71 kB 2.22 kB
oss-stable/react-client/cjs/react-client-flight.production.min.js +47.56% 3.75 kB 5.53 kB +29.42% 1.71 kB 2.22 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +41.12% 14.33 kB 20.23 kB +28.46% 4.16 kB 5.35 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js +41.12% 14.33 kB 20.23 kB +28.46% 4.16 kB 5.35 kB
oss-stable/react-client/cjs/react-client-flight.development.js +41.12% 14.33 kB 20.23 kB +28.46% 4.16 kB 5.35 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack.production.min.js +39.22% 4.61 kB 6.41 kB +24.01% 2.02 kB 2.50 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack.production.min.js +39.22% 4.61 kB 6.41 kB +24.01% 2.02 kB 2.50 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack.production.min.js +39.22% 4.61 kB 6.41 kB +24.01% 2.02 kB 2.50 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack.production.min.js +37.33% 4.82 kB 6.62 kB +23.89% 2.11 kB 2.61 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack.production.min.js +37.33% 4.82 kB 6.62 kB +23.89% 2.11 kB 2.61 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack.production.min.js +37.33% 4.82 kB 6.62 kB +23.89% 2.11 kB 2.61 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack.development.js +31.95% 18.40 kB 24.27 kB +21.88% 5.14 kB 6.26 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack.development.js +31.95% 18.40 kB 24.27 kB +21.88% 5.14 kB 6.26 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack.development.js +31.95% 18.40 kB 24.27 kB +21.88% 5.14 kB 6.26 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack.development.js +31.55% 19.72 kB 25.94 kB +21.37% 5.27 kB 6.39 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack.development.js +31.55% 19.72 kB 25.94 kB +21.37% 5.27 kB 6.39 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack.development.js +31.55% 19.72 kB 25.94 kB +21.37% 5.27 kB 6.39 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
facebook-relay/flight/ReactFlightNativeRelayClient-prod.js +69.32% 6.20 kB 10.50 kB +43.54% 1.87 kB 2.68 kB
facebook-www/ReactFlightDOMRelayClient-prod.classic.js +69.09% 6.21 kB 10.49 kB +43.31% 1.87 kB 2.68 kB
facebook-www/ReactFlightDOMRelayClient-prod.modern.js +69.09% 6.21 kB 10.49 kB +43.31% 1.87 kB 2.68 kB
facebook-www/ReactFlightDOMRelayClient-dev.classic.js +53.99% 11.19 kB 17.23 kB +37.17% 3.26 kB 4.47 kB
facebook-www/ReactFlightDOMRelayClient-dev.modern.js +53.99% 11.19 kB 17.23 kB +37.17% 3.26 kB 4.47 kB
facebook-relay/flight/ReactFlightNativeRelayClient-dev.js +53.58% 11.26 kB 17.30 kB +36.93% 3.27 kB 4.48 kB
oss-experimental/react-client/cjs/react-client-flight.production.min.js +47.56% 3.75 kB 5.53 kB +29.42% 1.71 kB 2.22 kB
oss-stable-semver/react-client/cjs/react-client-flight.production.min.js +47.56% 3.75 kB 5.53 kB +29.42% 1.71 kB 2.22 kB
oss-stable/react-client/cjs/react-client-flight.production.min.js +47.56% 3.75 kB 5.53 kB +29.42% 1.71 kB 2.22 kB
oss-experimental/react-client/cjs/react-client-flight.development.js +41.12% 14.33 kB 20.23 kB +28.46% 4.16 kB 5.35 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js +41.12% 14.33 kB 20.23 kB +28.46% 4.16 kB 5.35 kB
oss-stable/react-client/cjs/react-client-flight.development.js +41.12% 14.33 kB 20.23 kB +28.46% 4.16 kB 5.35 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack.production.min.js +39.22% 4.61 kB 6.41 kB +24.01% 2.02 kB 2.50 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack.production.min.js +39.22% 4.61 kB 6.41 kB +24.01% 2.02 kB 2.50 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack.production.min.js +39.22% 4.61 kB 6.41 kB +24.01% 2.02 kB 2.50 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack.production.min.js +37.33% 4.82 kB 6.62 kB +23.89% 2.11 kB 2.61 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack.production.min.js +37.33% 4.82 kB 6.62 kB +23.89% 2.11 kB 2.61 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack.production.min.js +37.33% 4.82 kB 6.62 kB +23.89% 2.11 kB 2.61 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack.development.js +31.95% 18.40 kB 24.27 kB +21.88% 5.14 kB 6.26 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack.development.js +31.95% 18.40 kB 24.27 kB +21.88% 5.14 kB 6.26 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack.development.js +31.95% 18.40 kB 24.27 kB +21.88% 5.14 kB 6.26 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack.development.js +31.55% 19.72 kB 25.94 kB +21.37% 5.27 kB 6.39 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack.development.js +31.55% 19.72 kB 25.94 kB +21.37% 5.27 kB 6.39 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack.development.js +31.55% 19.72 kB 25.94 kB +21.37% 5.27 kB 6.39 kB

Generated by :no_entry_sign: dangerJS against 1c481e9873fb5460b2fa050c78ddb2ef49dd6585

sizebot avatar Sep 14 '22 04:09 sizebot