Skip to content

Conversation

@acdlite
Copy link
Collaborator

@acdlite acdlite commented Nov 4, 2022

Implements Promise as a valid React node types. The idea is that any type that can be unwrapped with use should also be renderable.

When the reconciler encounters a Usable in a child position, it will transparently unwrap the value before reconciling it. The value of the inner value will determine the identity of the child during reconciliation, not the Usable object that wraps around it.

Unlike use, the reconciler will recursively unwrap the value until it reaches a non-Usable type, e.g. Usable<Usable<Usable<T>>> will resolve to T.

In this initial commit, I've added support for Promises. I will do Context in the next step.

Being able to render a promise as a child has several interesting implications. The Server Components response format can use this feature in its implementation — instead of wrapping references to client components in React.lazy, it can just use a promise.

This also fulfills one of the requirements for async components on the client, because an async component always returns a promise for a React node. However, we will likely warn and/or lint against this for the time being because there are major caveats if you re-render an async component in response to user input. (Note: async components already work in a Server Components environment — the caveats only apply to running them in the browser.)

To suspend, React uses the same algorithm as use: by throwing an exception to unwind the stack, then replaying the begin phase once the promise resolves. It's a little weird to suspend during reconciliation, however, lazy already does this so if there were any obvious bugs related to that we likely would have already found them.

Still, the structure is a bit unfortunate. Ideally, we shouldn't need to replay the entire begin phase of the parent fiber in order to reconcile the children again. This would require a somewhat significant refactor, because reconciliation happens deep within the begin phase, and depending on the type of work, not always at the end. We should consider as a future improvement.

@facebook-github-bot facebook-github-bot added CLA Signed React Core Team Opened by a member of the React Core Team labels Nov 4, 2022
@sizebot
Copy link

sizebot commented Nov 4, 2022

Comparing: f31005d...7f46ef1

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 +0.23% 154.36 kB 154.72 kB +0.33% 48.99 kB 49.15 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js +0.23% 156.28 kB 156.64 kB +0.25% 49.61 kB 49.74 kB
facebook-www/ReactDOM-prod.classic.js +0.26% 533.22 kB 534.59 kB +0.18% 94.44 kB 94.60 kB
facebook-www/ReactDOM-prod.modern.js +0.27% 518.31 kB 519.69 kB +0.18% 92.26 kB 92.42 kB
facebook-www/ReactDOMForked-prod.classic.js +0.26% 533.22 kB 534.59 kB +0.18% 94.44 kB 94.60 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.development.js +0.55% 145.48 kB 146.27 kB +0.69% 36.21 kB 36.46 kB
oss-stable/react-server/cjs/react-server.development.js +0.55% 145.48 kB 146.27 kB +0.69% 36.21 kB 36.46 kB
oss-experimental/react-server/cjs/react-server.development.js +0.55% 146.10 kB 146.89 kB +0.70% 36.40 kB 36.65 kB
facebook-react-native/react-test-renderer/cjs/ReactTestRenderer-dev.js +0.52% 766.39 kB 770.40 kB +0.61% 164.21 kB 165.22 kB
facebook-www/ReactTestRenderer-dev.modern.js +0.51% 782.79 kB 786.80 kB +0.59% 167.52 kB 168.51 kB
facebook-www/ReactTestRenderer-dev.classic.js +0.51% 782.79 kB 786.80 kB +0.59% 167.52 kB 168.51 kB
oss-stable-semver/react-test-renderer/cjs/react-test-renderer.development.js +0.50% 752.09 kB 755.85 kB +0.59% 162.57 kB 163.53 kB
oss-stable/react-test-renderer/cjs/react-test-renderer.development.js +0.50% 752.11 kB 755.87 kB +0.59% 162.60 kB 163.55 kB
oss-experimental/react-test-renderer/cjs/react-test-renderer.development.js +0.50% 752.21 kB 755.98 kB +0.59% 162.63 kB 163.59 kB
oss-stable-semver/react-test-renderer/umd/react-test-renderer.development.js +0.50% 787.86 kB 791.76 kB +0.60% 164.28 kB 165.27 kB
oss-stable/react-test-renderer/umd/react-test-renderer.development.js +0.50% 787.88 kB 791.78 kB +0.60% 164.30 kB 165.29 kB
oss-experimental/react-test-renderer/umd/react-test-renderer.development.js +0.50% 787.98 kB 791.89 kB +0.60% 164.34 kB 165.33 kB
oss-stable-semver/react-art/cjs/react-art.development.js +0.49% 772.61 kB 776.37 kB +0.56% 166.63 kB 167.56 kB
oss-stable/react-art/cjs/react-art.development.js +0.49% 772.63 kB 776.39 kB +0.55% 166.66 kB 167.58 kB
oss-experimental/react-art/cjs/react-art.development.js +0.48% 780.43 kB 784.19 kB +0.55% 168.05 kB 168.99 kB
facebook-react-native/react-test-renderer/cjs/ReactTestRenderer-prod.js +0.48% 289.56 kB 290.94 kB +0.32% 51.00 kB 51.16 kB
react-native/implementations/ReactFabric-dev.js +0.47% 844.88 kB 848.89 kB +0.54% 183.17 kB 184.15 kB
react-native/implementations/ReactNativeRenderer-dev.js +0.47% 854.42 kB 858.43 kB +0.53% 185.62 kB 186.61 kB
facebook-www/ReactART-dev.modern.js +0.46% 873.45 kB 877.46 kB +0.52% 184.36 kB 185.31 kB
react-native/implementations/ReactFabric-dev.fb.js +0.45% 881.69 kB 885.70 kB +0.51% 190.29 kB 191.27 kB
facebook-www/ReactART-dev.classic.js +0.45% 883.91 kB 887.92 kB +0.53% 186.45 kB 187.43 kB
facebook-react-native/react-test-renderer/cjs/ReactTestRenderer-profiling.js +0.45% 305.13 kB 306.51 kB +0.33% 53.35 kB 53.53 kB
react-native/implementations/ReactNativeRenderer-dev.fb.js +0.45% 891.21 kB 895.22 kB +0.51% 192.77 kB 193.75 kB
oss-stable-semver/react-art/umd/react-art.development.js +0.44% 880.15 kB 884.05 kB +0.53% 184.90 kB 185.89 kB
oss-stable/react-art/umd/react-art.development.js +0.44% 880.17 kB 884.07 kB +0.53% 184.92 kB 185.91 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler.development.js +0.44% 852.42 kB 856.18 kB +0.52% 180.96 kB 181.90 kB
oss-stable/react-reconciler/cjs/react-reconciler.development.js +0.44% 852.45 kB 856.21 kB +0.52% 180.98 kB 181.92 kB
oss-experimental/react-art/umd/react-art.development.js +0.44% 888.42 kB 892.32 kB +0.52% 186.37 kB 187.33 kB
oss-experimental/react-reconciler/cjs/react-reconciler.development.js +0.44% 860.25 kB 864.01 kB +0.52% 182.40 kB 183.35 kB
react-native/implementations/ReactFabric-prod.js +0.43% 316.88 kB 318.25 kB +0.25% 55.92 kB 56.06 kB
react-native/implementations/ReactNativeRenderer-prod.js +0.43% 323.03 kB 324.40 kB +0.25% 56.87 kB 57.01 kB
facebook-www/ReactART-prod.modern.js +0.42% 325.19 kB 326.57 kB +0.29% 55.01 kB 55.17 kB
react-native/implementations/ReactFabric-prod.fb.js +0.42% 327.62 kB 328.99 kB +0.32% 58.04 kB 58.22 kB
react-native/implementations/ReactNativeRenderer-prod.fb.js +0.41% 333.77 kB 335.14 kB +0.31% 59.02 kB 59.20 kB
react-native/implementations/ReactFabric-profiling.js +0.41% 336.06 kB 337.44 kB +0.21% 59.15 kB 59.27 kB
facebook-www/ReactART-prod.classic.js +0.41% 336.14 kB 337.52 kB +0.29% 56.87 kB 57.04 kB
oss-stable-semver/react-art/cjs/react-art.production.min.js +0.40% 92.28 kB 92.65 kB +0.45% 28.36 kB 28.48 kB
react-native/implementations/ReactNativeRenderer-profiling.js +0.40% 342.29 kB 343.67 kB +0.22% 60.11 kB 60.24 kB
oss-stable/react-art/cjs/react-art.production.min.js +0.40% 92.31 kB 92.68 kB +0.45% 28.35 kB 28.48 kB
oss-experimental/react-art/cjs/react-art.production.min.js +0.40% 93.72 kB 94.09 kB +0.35% 28.78 kB 28.88 kB
react-native/implementations/ReactFabric-profiling.fb.js +0.39% 354.53 kB 355.90 kB +0.28% 62.19 kB 62.36 kB
react-native/implementations/ReactNativeRenderer-profiling.fb.js +0.38% 360.74 kB 362.12 kB +0.28% 63.24 kB 63.42 kB
oss-stable-semver/react-test-renderer/cjs/react-test-renderer.production.min.js +0.37% 100.15 kB 100.52 kB +0.56% 30.72 kB 30.89 kB
oss-stable/react-test-renderer/cjs/react-test-renderer.production.min.js +0.37% 100.18 kB 100.55 kB +0.56% 30.72 kB 30.89 kB
oss-experimental/react-test-renderer/cjs/react-test-renderer.production.min.js +0.37% 100.24 kB 100.61 kB +0.55% 30.75 kB 30.92 kB
oss-stable-semver/react-test-renderer/umd/react-test-renderer.production.min.js +0.36% 100.41 kB 100.76 kB +0.44% 31.12 kB 31.25 kB
oss-stable/react-test-renderer/umd/react-test-renderer.production.min.js +0.36% 100.43 kB 100.79 kB +0.43% 31.12 kB 31.25 kB
oss-experimental/react-test-renderer/umd/react-test-renderer.production.min.js +0.36% 100.49 kB 100.85 kB +0.43% 31.15 kB 31.28 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler.production.min.js +0.35% 106.13 kB 106.50 kB +0.41% 32.29 kB 32.42 kB
oss-stable/react-reconciler/cjs/react-reconciler.production.min.js +0.35% 106.16 kB 106.52 kB +0.41% 32.31 kB 32.44 kB
oss-stable-semver/react-server/cjs/react-server.production.min.js +0.34% 24.24 kB 24.33 kB +0.25% 8.29 kB 8.31 kB
oss-stable/react-server/cjs/react-server.production.min.js +0.34% 24.24 kB 24.33 kB +0.25% 8.29 kB 8.31 kB
oss-experimental/react-reconciler/cjs/react-reconciler.production.min.js +0.34% 107.57 kB 107.94 kB +0.38% 32.75 kB 32.87 kB
oss-experimental/react-server/cjs/react-server.production.min.js +0.33% 24.49 kB 24.57 kB +0.26% 8.38 kB 8.40 kB
facebook-www/ReactDOMTesting-dev.modern.js +0.33% 1,205.86 kB 1,209.87 kB +0.38% 266.83 kB 267.85 kB
facebook-www/ReactDOMTesting-dev.classic.js +0.32% 1,235.89 kB 1,239.90 kB +0.36% 272.61 kB 273.61 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler.profiling.min.js +0.32% 115.02 kB 115.39 kB +0.37% 34.47 kB 34.59 kB
oss-stable/react-reconciler/cjs/react-reconciler.profiling.min.js +0.32% 115.05 kB 115.42 kB +0.36% 34.49 kB 34.62 kB
oss-experimental/react-reconciler/cjs/react-reconciler.profiling.min.js +0.32% 116.46 kB 116.83 kB +0.39% 34.90 kB 35.04 kB
oss-stable-semver/react-dom/cjs/react-dom.development.js +0.31% 1,202.32 kB 1,206.08 kB +0.36% 266.62 kB 267.57 kB
oss-stable/react-dom/cjs/react-dom.development.js +0.31% 1,202.34 kB 1,206.10 kB +0.36% 266.64 kB 267.60 kB
oss-experimental/react-dom/cjs/react-dom-unstable_testing.development.js +0.31% 1,205.52 kB 1,209.29 kB +0.36% 267.20 kB 268.17 kB
oss-experimental/react-dom/cjs/react-dom.development.js +0.31% 1,212.39 kB 1,216.15 kB +0.35% 268.62 kB 269.57 kB
oss-stable-semver/react-dom/umd/react-dom.development.js +0.31% 1,260.76 kB 1,264.66 kB +0.36% 269.60 kB 270.58 kB
oss-stable/react-dom/umd/react-dom.development.js +0.31% 1,260.78 kB 1,264.68 kB +0.37% 269.62 kB 270.61 kB
oss-experimental/react-dom/umd/react-dom.development.js +0.31% 1,271.38 kB 1,275.29 kB +0.36% 271.58 kB 272.56 kB
facebook-www/ReactDOMForked-dev.modern.js +0.30% 1,332.06 kB 1,336.07 kB +0.34% 289.64 kB 290.62 kB
facebook-www/ReactDOM-dev.modern.js +0.30% 1,332.06 kB 1,336.07 kB +0.34% 289.64 kB 290.62 kB
oss-stable-semver/react-art/umd/react-art.production.min.js +0.30% 128.12 kB 128.50 kB +0.24% 39.58 kB 39.67 kB
oss-stable/react-art/umd/react-art.production.min.js +0.30% 128.14 kB 128.52 kB +0.24% 39.58 kB 39.67 kB
facebook-www/ReactDOMForked-dev.classic.js +0.30% 1,357.05 kB 1,361.06 kB +0.33% 294.25 kB 295.21 kB
facebook-www/ReactDOM-dev.classic.js +0.30% 1,357.05 kB 1,361.06 kB +0.33% 294.25 kB 295.21 kB
oss-experimental/react-art/umd/react-art.production.min.js +0.29% 129.56 kB 129.94 kB +0.34% 40.01 kB 40.15 kB
facebook-www/ReactDOMTesting-prod.modern.js +0.29% 480.63 kB 482.00 kB +0.18% 88.20 kB 88.36 kB
facebook-www/ReactDOMTesting-prod.classic.js +0.28% 496.59 kB 497.96 kB +0.18% 90.57 kB 90.73 kB
facebook-www/ReactDOMServerStreaming-dev.modern.js +0.27% 321.79 kB 322.65 kB +0.37% 72.34 kB 72.61 kB
facebook-www/ReactDOM-prod.modern.js +0.27% 518.31 kB 519.69 kB +0.18% 92.26 kB 92.42 kB
facebook-www/ReactDOMForked-prod.modern.js +0.27% 518.31 kB 519.69 kB +0.18% 92.26 kB 92.42 kB
facebook-www/ReactDOMServer-dev.modern.js +0.26% 326.31 kB 327.16 kB +0.37% 73.36 kB 73.63 kB
facebook-www/ReactDOM-prod.classic.js +0.26% 533.22 kB 534.59 kB +0.18% 94.44 kB 94.60 kB
facebook-www/ReactDOMForked-prod.classic.js +0.26% 533.22 kB 534.59 kB +0.18% 94.44 kB 94.60 kB
facebook-www/ReactDOMServer-dev.classic.js +0.26% 333.01 kB 333.86 kB +0.35% 74.80 kB 75.06 kB
oss-stable-semver/react-dom/cjs/react-dom-server.browser.development.js +0.25% 316.27 kB 317.07 kB +0.34% 72.66 kB 72.91 kB
oss-stable/react-dom/cjs/react-dom-server.browser.development.js +0.25% 316.29 kB 317.09 kB +0.34% 72.68 kB 72.93 kB
oss-experimental/react-dom/cjs/react-dom-static.browser.development.js +0.25% 316.89 kB 317.69 kB +0.34% 72.85 kB 73.10 kB
oss-stable-semver/react-dom/cjs/react-dom-server-legacy.browser.development.js +0.25% 317.06 kB 317.86 kB +0.35% 72.46 kB 72.72 kB
oss-stable/react-dom/cjs/react-dom-server-legacy.browser.development.js +0.25% 317.08 kB 317.88 kB +0.35% 72.49 kB 72.74 kB
oss-stable-semver/react-dom/cjs/react-dom-server.node.development.js +0.25% 317.43 kB 318.23 kB +0.34% 72.60 kB 72.85 kB
oss-stable/react-dom/cjs/react-dom-server.node.development.js +0.25% 317.46 kB 318.25 kB +0.34% 72.62 kB 72.87 kB
oss-experimental/react-dom/cjs/react-dom-server.browser.development.js +0.25% 317.59 kB 318.38 kB +0.34% 73.04 kB 73.28 kB
oss-stable-semver/react-dom/umd/react-dom-server.browser.development.js +0.25% 331.66 kB 332.49 kB +0.36% 73.42 kB 73.68 kB
oss-stable/react-dom/umd/react-dom-server.browser.development.js +0.25% 331.68 kB 332.51 kB +0.36% 73.44 kB 73.70 kB
oss-experimental/react-dom/cjs/react-dom-server-legacy.browser.development.js +0.25% 318.38 kB 319.18 kB +0.35% 72.84 kB 73.09 kB
facebook-www/ReactDOM-profiling.modern.js +0.25% 548.45 kB 549.83 kB +0.17% 96.77 kB 96.94 kB
facebook-www/ReactDOMForked-profiling.modern.js +0.25% 548.45 kB 549.83 kB +0.17% 96.77 kB 96.94 kB
oss-experimental/react-dom/cjs/react-dom-static.node.development.js +0.25% 318.71 kB 319.51 kB +0.34% 73.06 kB 73.31 kB
oss-experimental/react-dom/cjs/react-dom-server.node.development.js +0.25% 318.75 kB 319.55 kB +0.34% 72.97 kB 73.22 kB
oss-stable-semver/react-dom/cjs/react-dom-server-legacy.node.development.js +0.25% 318.77 kB 319.57 kB +0.35% 72.93 kB 73.19 kB
oss-stable/react-dom/cjs/react-dom-server-legacy.node.development.js +0.25% 318.79 kB 319.59 kB +0.35% 72.96 kB 73.21 kB
oss-stable-semver/react-dom/umd/react-dom-server-legacy.browser.development.js +0.25% 332.46 kB 333.30 kB +0.36% 73.24 kB 73.50 kB
oss-stable/react-dom/umd/react-dom-server-legacy.browser.development.js +0.25% 332.49 kB 333.32 kB +0.35% 73.26 kB 73.52 kB
oss-experimental/react-dom/umd/react-dom-server.browser.development.js +0.25% 333.06 kB 333.89 kB +0.36% 73.78 kB 74.04 kB
oss-experimental/react-dom/cjs/react-dom-server-legacy.node.development.js +0.25% 320.09 kB 320.88 kB +0.35% 73.31 kB 73.56 kB
oss-experimental/react-dom/umd/react-dom-server-legacy.browser.development.js +0.25% 333.86 kB 334.70 kB +0.35% 73.61 kB 73.87 kB
facebook-www/ReactDOM-profiling.classic.js +0.24% 563.45 kB 564.82 kB +0.17% 98.97 kB 99.14 kB
facebook-www/ReactDOMForked-profiling.classic.js +0.24% 563.45 kB 564.82 kB +0.17% 98.97 kB 99.14 kB
oss-stable-semver/react-dom/cjs/react-dom.production.min.js +0.23% 154.33 kB 154.69 kB +0.32% 48.99 kB 49.15 kB
oss-stable/react-dom/cjs/react-dom.production.min.js +0.23% 154.36 kB 154.72 kB +0.33% 48.99 kB 49.15 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js +0.23% 156.28 kB 156.64 kB +0.25% 49.61 kB 49.74 kB
oss-experimental/react-dom/cjs/react-dom-unstable_testing.production.min.js +0.22% 160.68 kB 161.04 kB +0.32% 51.43 kB 51.59 kB
oss-stable-semver/react-dom/cjs/react-dom.profiling.min.js +0.22% 163.84 kB 164.20 kB +0.33% 51.50 kB 51.67 kB
oss-stable/react-dom/cjs/react-dom.profiling.min.js +0.22% 163.87 kB 164.23 kB +0.33% 51.50 kB 51.67 kB
oss-experimental/react-dom/cjs/react-dom.profiling.min.js +0.22% 165.79 kB 166.15 kB +0.22% 52.10 kB 52.22 kB
oss-stable-semver/react-dom/umd/react-dom.production.min.js +0.21% 154.36 kB 154.69 kB +0.21% 49.70 kB 49.81 kB
oss-stable/react-dom/umd/react-dom.production.min.js +0.21% 154.38 kB 154.71 kB +0.21% 49.70 kB 49.81 kB
oss-experimental/react-dom/umd/react-dom.production.min.js +0.21% 156.28 kB 156.61 kB +0.15% 50.37 kB 50.45 kB
oss-experimental/react-dom/umd/react-dom.profiling.min.js +0.21% 165.12 kB 165.46 kB +0.19% 52.68 kB 52.78 kB
oss-stable-semver/react-dom/umd/react-dom.profiling.min.js +0.20% 163.20 kB 163.53 kB +0.14% 51.97 kB 52.05 kB
oss-stable/react-dom/umd/react-dom.profiling.min.js +0.20% 163.23 kB 163.56 kB +0.14% 51.97 kB 52.04 kB

Generated by 🚫 dangerJS against 7f46ef1

@acdlite acdlite marked this pull request as ready for review November 4, 2022 15:52
@acdlite acdlite force-pushed the promise-as-child branch 2 times, most recently from ca01d51 to 324cf1f Compare November 6, 2022 20:12
@acdlite acdlite changed the title Support Promise as React node (Fiber) Support Promise as a renderable node Nov 6, 2022
@acdlite acdlite force-pushed the promise-as-child branch 2 times, most recently from a665a00 to e593439 Compare November 18, 2022 20:41
lanes: Lanes,
): Fiber | null {
// This indirection only exists so we can reset `thenableState` at the end.
// It should get inlined by Closure.
Copy link
Collaborator

Choose a reason for hiding this comment

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

This doesn't appear to be the case. This function is called in many places and it's larger than closure considers inlinable. reconcileChildFibersImpl is returned as first class so it can't be inlined and is also recursive, so it's also not inlined into this function.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Hmm maybe it would work if I move the indirection into the factory function

I could also submit a PR to get rid of createChildReconciler and thread the arguments through instead

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

It makes sense to me that reconcileChildFibersImpl wouldn't get inlined, since it's recursive. Do you have a guess for why the outer one (reconcileChildFibers) isn't inlined into its callers, though? Since it's only a few lines long.

Copy link
Collaborator

@sebmarkbage sebmarkbage left a comment

Choose a reason for hiding this comment

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

Seems like we need to refactor more in this space in follow ups anyway.

acdlite added 2 commits March 11, 2023 16:52
Just a rename. Scope of this test file has expanded.
Implements Promise as a valid React node types. The idea is that any
type that can be unwrapped with `use` should also be renderable.

When the reconciler encounters a Usable in a child position, it will
transparently unwrap the value before reconciling it. The value of the
inner value will determine the identity of the child during
reconciliation, not the Usable object that wraps around it.

Unlike `use`, the reconciler will recursively unwrap the value until it
reaches a non-Usable type, e.g. Usable<Usable<Usable<T>>> will resolve
to T.

In this initial commit, I've added support for Promises. I will do
Context in the next step.

Being able to render a promise as a child has several interesting
implications. The Server Components response format can use this feature
in its implementation — instead of wrapping references to
client components in `React.lazy`, it can just use a promise.

This also fulfills one of the requirements for async components on the
client, because an async component always returns a promise for a React
node. However, we will likely warn and/or lint against this for the time
being because there are major caveats if you re-render an async
component in response to user input. (Note: async components already
work in a Server Components environment — the caveats only apply to
running them in the browser.)

To suspend, React uses the same algorithm as `use`: by throwing an
exception to unwind the stack, then replaying the begin phase once the
promise resolves. It's a little weird to suspend during reconciliation,
however, `lazy` already does this so if there were any obvious bugs
related to that we likely would have already found them.

Still, the structure is a bit unfortunate. Ideally, we shouldn't need to
replay the entire begin phase of the parent fiber in order to reconcile
the children again. This would require a somewhat significant refactor,
because reconciliation happens deep within the begin phase, and
depending on the type of work, not always at the end. We should consider
as a future improvement.
@react-sizebot
Copy link

Comparing: f411e89...610b9df

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 +0.24% 156.85 kB 157.23 kB +0.26% 49.61 kB 49.74 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js +0.24% 158.86 kB 159.24 kB +0.24% 50.29 kB 50.41 kB
facebook-www/ReactDOM-prod.classic.js +0.25% 539.31 kB 540.68 kB +0.16% 95.93 kB 96.09 kB
facebook-www/ReactDOM-prod.modern.js +0.26% 523.17 kB 524.55 kB +0.18% 93.62 kB 93.78 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
facebook-react-native/react-test-renderer/cjs/ReactTestRenderer-prod.js +0.47% 289.49 kB 290.86 kB +0.31% 51.30 kB 51.46 kB
facebook-react-native/react-test-renderer/cjs/ReactTestRenderer-dev.js +0.46% 766.07 kB 769.56 kB +0.59% 164.87 kB 165.84 kB
oss-stable-semver/react-server/cjs/react-server.development.js +0.45% 144.67 kB 145.32 kB +0.64% 36.05 kB 36.28 kB
oss-stable/react-server/cjs/react-server.development.js +0.45% 144.67 kB 145.32 kB +0.64% 36.05 kB 36.28 kB
oss-experimental/react-server/cjs/react-server.development.js +0.45% 145.32 kB 145.98 kB +0.63% 36.24 kB 36.47 kB
facebook-react-native/react-test-renderer/cjs/ReactTestRenderer-profiling.js +0.45% 305.23 kB 306.61 kB +0.32% 53.67 kB 53.85 kB
facebook-www/ReactTestRenderer-dev.modern.js +0.45% 782.32 kB 785.82 kB +0.59% 168.07 kB 169.05 kB
facebook-www/ReactTestRenderer-dev.classic.js +0.45% 782.33 kB 785.82 kB +0.59% 168.07 kB 169.05 kB
oss-stable-semver/react-test-renderer/cjs/react-test-renderer.development.js +0.44% 751.61 kB 754.95 kB +0.58% 163.07 kB 164.02 kB
oss-stable/react-test-renderer/cjs/react-test-renderer.development.js +0.44% 751.64 kB 754.97 kB +0.59% 163.09 kB 164.05 kB
oss-experimental/react-test-renderer/cjs/react-test-renderer.development.js +0.44% 752.01 kB 755.34 kB +0.59% 163.19 kB 164.15 kB
oss-stable-semver/react-test-renderer/umd/react-test-renderer.development.js +0.44% 787.39 kB 790.86 kB +0.60% 164.89 kB 165.87 kB
oss-stable/react-test-renderer/umd/react-test-renderer.development.js +0.44% 787.41 kB 790.88 kB +0.60% 164.91 kB 165.89 kB
react-native/implementations/ReactFabric-prod.js +0.44% 311.85 kB 313.23 kB +0.33% 55.04 kB 55.22 kB
oss-experimental/react-test-renderer/umd/react-test-renderer.development.js +0.44% 787.80 kB 791.27 kB +0.59% 165.00 kB 165.99 kB
oss-stable-semver/react-art/cjs/react-art.development.js +0.43% 772.20 kB 775.53 kB +0.56% 167.22 kB 168.16 kB
oss-stable/react-art/cjs/react-art.development.js +0.43% 772.22 kB 775.56 kB +0.56% 167.25 kB 168.18 kB
react-native/implementations/ReactNativeRenderer-prod.js +0.43% 318.97 kB 320.34 kB +0.29% 56.38 kB 56.54 kB
oss-experimental/react-art/cjs/react-art.development.js +0.43% 780.46 kB 783.79 kB +0.57% 168.73 kB 169.69 kB
react-native/implementations/ReactFabric-prod.fb.js +0.43% 322.55 kB 323.92 kB +0.33% 57.06 kB 57.25 kB
facebook-www/ReactART-prod.modern.js +0.42% 325.35 kB 326.73 kB +0.28% 55.36 kB 55.51 kB
react-native/implementations/ReactFabric-dev.js +0.42% 832.84 kB 836.34 kB +0.54% 179.72 kB 180.69 kB
react-native/implementations/ReactNativeRenderer-prod.fb.js +0.42% 329.66 kB 331.03 kB +0.29% 58.45 kB 58.62 kB
react-native/implementations/ReactFabric-profiling.js +0.41% 331.19 kB 332.56 kB +0.33% 58.23 kB 58.42 kB
react-native/implementations/ReactNativeRenderer-dev.js +0.41% 845.98 kB 849.47 kB +0.53% 183.54 kB 184.51 kB
facebook-www/ReactART-prod.classic.js +0.41% 336.33 kB 337.71 kB +0.27% 57.26 kB 57.42 kB
react-native/implementations/ReactNativeRenderer-profiling.js +0.41% 338.38 kB 339.76 kB +0.29% 59.59 kB 59.76 kB
react-native/implementations/ReactFabric-dev.fb.js +0.40% 869.69 kB 873.18 kB +0.56% 186.84 kB 187.88 kB
facebook-www/ReactART-dev.modern.js +0.40% 871.56 kB 875.05 kB +0.54% 184.60 kB 185.59 kB
oss-stable-semver/react-art/cjs/react-art.production.min.js +0.40% 92.58 kB 92.95 kB +0.38% 28.44 kB 28.55 kB
oss-stable/react-art/cjs/react-art.production.min.js +0.40% 92.62 kB 92.99 kB +0.38% 28.47 kB 28.57 kB
facebook-www/ReactART-dev.classic.js +0.40% 882.75 kB 886.25 kB +0.54% 186.89 kB 187.91 kB
react-native/implementations/ReactNativeRenderer-dev.fb.js +0.40% 882.80 kB 886.29 kB +0.52% 190.75 kB 191.74 kB
oss-experimental/react-art/cjs/react-art.production.min.js +0.39% 94.13 kB 94.50 kB +0.43% 28.90 kB 29.02 kB
react-native/implementations/ReactFabric-profiling.fb.js +0.39% 349.73 kB 351.11 kB +0.32% 61.23 kB 61.42 kB
oss-stable-semver/react-art/umd/react-art.development.js +0.39% 885.71 kB 889.18 kB +0.52% 186.27 kB 187.24 kB
oss-stable/react-art/umd/react-art.development.js +0.39% 885.73 kB 889.20 kB +0.52% 186.29 kB 187.26 kB
oss-experimental/react-art/umd/react-art.development.js +0.39% 894.44 kB 897.91 kB +0.52% 187.77 kB 188.75 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler.development.js +0.39% 866.35 kB 869.69 kB +0.51% 183.78 kB 184.73 kB
oss-stable/react-reconciler/cjs/react-reconciler.development.js +0.39% 866.38 kB 869.71 kB +0.51% 183.81 kB 184.75 kB
react-native/implementations/ReactNativeRenderer-profiling.fb.js +0.38% 356.91 kB 358.28 kB +0.28% 62.67 kB 62.85 kB
oss-experimental/react-reconciler/cjs/react-reconciler.development.js +0.38% 874.62 kB 877.95 kB +0.51% 185.30 kB 186.25 kB
oss-stable-semver/react-test-renderer/cjs/react-test-renderer.production.min.js +0.37% 100.49 kB 100.86 kB +0.44% 30.76 kB 30.89 kB
oss-stable/react-test-renderer/cjs/react-test-renderer.production.min.js +0.37% 100.54 kB 100.91 kB +0.43% 30.78 kB 30.91 kB
oss-experimental/react-test-renderer/cjs/react-test-renderer.production.min.js +0.37% 100.66 kB 101.03 kB +0.43% 30.82 kB 30.95 kB
oss-stable-semver/react-test-renderer/umd/react-test-renderer.production.min.js +0.36% 100.85 kB 101.22 kB +0.40% 31.20 kB 31.32 kB
oss-stable/react-test-renderer/umd/react-test-renderer.production.min.js +0.36% 100.90 kB 101.27 kB +0.39% 31.22 kB 31.35 kB
oss-experimental/react-test-renderer/umd/react-test-renderer.production.min.js +0.36% 101.03 kB 101.39 kB +0.38% 31.28 kB 31.40 kB
oss-stable-semver/react-server/cjs/react-server.production.min.js +0.34% 24.34 kB 24.42 kB +0.25% 8.30 kB 8.32 kB
oss-stable/react-server/cjs/react-server.production.min.js +0.34% 24.34 kB 24.42 kB +0.25% 8.30 kB 8.32 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler.production.min.js +0.34% 109.18 kB 109.54 kB +0.37% 33.08 kB 33.20 kB
oss-stable/react-reconciler/cjs/react-reconciler.production.min.js +0.34% 109.20 kB 109.57 kB +0.37% 33.10 kB 33.22 kB
oss-experimental/react-server/cjs/react-server.production.min.js +0.33% 24.60 kB 24.68 kB +0.30% 8.39 kB 8.42 kB
oss-experimental/react-reconciler/cjs/react-reconciler.production.min.js +0.33% 110.70 kB 111.07 kB +0.38% 33.55 kB 33.68 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler.profiling.min.js +0.31% 118.17 kB 118.54 kB +0.31% 35.31 kB 35.42 kB
oss-stable/react-reconciler/cjs/react-reconciler.profiling.min.js +0.31% 118.19 kB 118.56 kB +0.30% 35.33 kB 35.44 kB
oss-experimental/react-reconciler/cjs/react-reconciler.profiling.min.js +0.31% 119.69 kB 120.06 kB +0.32% 35.76 kB 35.88 kB
facebook-www/ReactDOMTesting-dev.modern.js +0.29% 1,201.68 kB 1,205.18 kB +0.36% 266.35 kB 267.31 kB
oss-stable-semver/react-art/umd/react-art.production.min.js +0.29% 129.85 kB 130.22 kB +0.24% 40.57 kB 40.67 kB
oss-stable/react-art/umd/react-art.production.min.js +0.29% 129.90 kB 130.27 kB +0.24% 40.59 kB 40.69 kB
oss-experimental/react-art/umd/react-art.production.min.js +0.28% 131.41 kB 131.78 kB +0.28% 41.05 kB 41.16 kB
facebook-www/ReactDOMTesting-dev.classic.js +0.28% 1,232.08 kB 1,235.58 kB +0.35% 272.22 kB 273.18 kB
facebook-www/ReactDOMTesting-prod.modern.js +0.28% 485.17 kB 486.54 kB +0.19% 89.37 kB 89.54 kB
oss-stable-semver/react-dom/cjs/react-dom.development.js +0.28% 1,199.75 kB 1,203.09 kB +0.36% 266.33 kB 267.30 kB
oss-stable/react-dom/cjs/react-dom.development.js +0.28% 1,199.77 kB 1,203.11 kB +0.36% 266.36 kB 267.33 kB
oss-experimental/react-dom/cjs/react-dom-unstable_testing.development.js +0.28% 1,203.67 kB 1,207.00 kB +0.35% 267.12 kB 268.07 kB
oss-stable-semver/react-dom/umd/react-dom.development.js +0.28% 1,257.43 kB 1,260.90 kB +0.36% 269.21 kB 270.18 kB
oss-stable/react-dom/umd/react-dom.development.js +0.28% 1,257.45 kB 1,260.92 kB +0.36% 269.24 kB 270.20 kB
oss-experimental/react-dom/cjs/react-dom.development.js +0.28% 1,210.25 kB 1,213.58 kB +0.36% 268.37 kB 269.35 kB
facebook-www/ReactDOMTesting-prod.classic.js +0.27% 500.82 kB 502.19 kB +0.19% 91.63 kB 91.81 kB
oss-experimental/react-dom/umd/react-dom.development.js +0.27% 1,268.50 kB 1,271.97 kB +0.36% 271.24 kB 272.23 kB
facebook-www/ReactDOM-prod.modern.js +0.26% 523.17 kB 524.55 kB +0.18% 93.62 kB 93.78 kB
facebook-www/ReactDOM-dev.modern.js +0.26% 1,330.44 kB 1,333.93 kB +0.36% 289.50 kB 290.53 kB
facebook-www/ReactDOM-dev.classic.js +0.26% 1,358.14 kB 1,361.64 kB +0.35% 294.62 kB 295.65 kB
facebook-www/ReactDOM-prod.classic.js +0.25% 539.31 kB 540.68 kB +0.16% 95.93 kB 96.09 kB
facebook-www/ReactDOM-profiling.modern.js +0.25% 553.41 kB 554.78 kB +0.18% 97.99 kB 98.16 kB
oss-stable-semver/react-dom/cjs/react-dom.production.min.js +0.24% 156.78 kB 157.16 kB +0.27% 49.59 kB 49.72 kB
oss-stable/react-dom/cjs/react-dom.production.min.js +0.24% 156.85 kB 157.23 kB +0.26% 49.61 kB 49.74 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js +0.24% 158.86 kB 159.24 kB +0.24% 50.29 kB 50.41 kB
oss-stable-semver/react-dom/umd/react-dom.production.min.js +0.24% 156.87 kB 157.25 kB +0.18% 50.24 kB 50.34 kB
oss-stable/react-dom/umd/react-dom.production.min.js +0.24% 156.94 kB 157.32 kB +0.18% 50.27 kB 50.36 kB
facebook-www/ReactDOM-profiling.classic.js +0.24% 569.64 kB 571.02 kB +0.16% 100.43 kB 100.59 kB
oss-experimental/react-dom/umd/react-dom.production.min.js +0.24% 158.94 kB 159.33 kB +0.23% 50.92 kB 51.04 kB
oss-experimental/react-dom/cjs/react-dom-unstable_testing.production.min.js +0.24% 163.25 kB 163.63 kB +0.29% 52.06 kB 52.21 kB
oss-stable-semver/react-dom/cjs/react-dom.profiling.min.js +0.23% 166.39 kB 166.78 kB +0.27% 52.11 kB 52.25 kB
oss-stable/react-dom/cjs/react-dom.profiling.min.js +0.23% 166.46 kB 166.85 kB +0.27% 52.13 kB 52.27 kB
oss-stable-semver/react-dom/umd/react-dom.profiling.min.js +0.23% 165.84 kB 166.22 kB +0.18% 52.62 kB 52.71 kB
oss-stable/react-dom/umd/react-dom.profiling.min.js +0.23% 165.91 kB 166.29 kB +0.18% 52.64 kB 52.74 kB
oss-experimental/react-dom/cjs/react-dom.profiling.min.js +0.23% 168.47 kB 168.86 kB +0.23% 52.83 kB 52.95 kB
oss-experimental/react-dom/umd/react-dom.profiling.min.js +0.23% 167.91 kB 168.29 kB +0.23% 53.35 kB 53.47 kB

Generated by 🚫 dangerJS against 610b9df

@acdlite acdlite merged commit d4f58c3 into facebook:main Mar 11, 2023
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.

5 participants