react icon indicating copy to clipboard operation
react copied to clipboard

[ServerRenderer][draft] Add option to send instructions as data attributes

Open mofeiZ opened this issue 3 years ago • 1 comments

Would love to get some feedback on this before writing tests.

Changes made:

  • Running with enableFizzExternalRuntime (feature flag) and unstable_externalRuntimeSrc (param) will generate the following
<div 
  hidden data-react-server-instruction="$INSTR"
  data-react-server-arg0="param0"
  data-react-server-arg1="param1"
></div>

What's left (done)

  • ~~Add disableInstructionExecution as an entrypoint parameter~~
  • ~~Add a MutationObserver implementation~~
  • ~~Add ^ to test setup (when using Meta's feature flags)~~

Summary

How did you test this change?

mofeiZ avatar Oct 05 '22 22:10 mofeiZ

Comparing: e98225485a124e35abc4cea82e6da944472ce7c7...f35926fdbe4c415467a7622b80b3ea83e03dbd78

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 = 154.55 kB 154.55 kB = 49.05 kB 49.04 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js = 156.47 kB 156.47 kB = 49.67 kB 49.67 kB
facebook-www/ReactDOM-prod.classic.js = 533.67 kB 533.67 kB = 94.54 kB 94.54 kB
facebook-www/ReactDOM-prod.modern.js = 518.77 kB 518.77 kB = 92.35 kB 92.35 kB
facebook-www/ReactDOMForked-prod.classic.js = 533.67 kB 533.67 kB = 94.54 kB 94.54 kB
oss-experimental/react-dom/unstable_server-external-runtime.js +65.66% 1.52 kB 2.51 kB +55.60% 0.73 kB 1.14 kB
oss-stable-semver/react-dom/unstable_server-external-runtime.js +65.66% 1.52 kB 2.51 kB +55.60% 0.73 kB 1.14 kB
oss-stable/react-dom/unstable_server-external-runtime.js +65.66% 1.52 kB 2.51 kB +55.60% 0.73 kB 1.14 kB
facebook-www/ReactDOMServerStreaming-prod.modern.js +5.57% 121.77 kB 128.56 kB +2.84% 24.02 kB 24.70 kB
facebook-www/ReactDOMServer-prod.modern.js +5.43% 117.08 kB 123.43 kB +2.87% 22.73 kB 23.39 kB
facebook-www/ReactDOMServer-prod.classic.js +5.29% 120.22 kB 126.57 kB +2.73% 23.37 kB 24.01 kB
facebook-www/ReactDOMServer-dev.modern.js +3.19% 326.42 kB 336.82 kB +2.15% 73.39 kB 74.96 kB
facebook-www/ReactDOMServerStreaming-dev.modern.js +3.16% 321.90 kB 332.07 kB +2.10% 72.36 kB 73.88 kB
facebook-www/ReactDOMServer-dev.classic.js +3.12% 333.11 kB 343.52 kB +2.10% 74.82 kB 76.39 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-dom/unstable_server-external-runtime.js +65.66% 1.52 kB 2.51 kB +55.60% 0.73 kB 1.14 kB
oss-stable-semver/react-dom/unstable_server-external-runtime.js +65.66% 1.52 kB 2.51 kB +55.60% 0.73 kB 1.14 kB
oss-stable/react-dom/unstable_server-external-runtime.js +65.66% 1.52 kB 2.51 kB +55.60% 0.73 kB 1.14 kB
facebook-www/ReactDOMServerStreaming-prod.modern.js +5.57% 121.77 kB 128.56 kB +2.84% 24.02 kB 24.70 kB
facebook-www/ReactDOMServer-prod.modern.js +5.43% 117.08 kB 123.43 kB +2.87% 22.73 kB 23.39 kB
facebook-www/ReactDOMServer-prod.classic.js +5.29% 120.22 kB 126.57 kB +2.73% 23.37 kB 24.01 kB
facebook-www/ReactDOMServer-dev.modern.js +3.19% 326.42 kB 336.82 kB +2.15% 73.39 kB 74.96 kB
facebook-www/ReactDOMServerStreaming-dev.modern.js +3.16% 321.90 kB 332.07 kB +2.10% 72.36 kB 73.88 kB
facebook-www/ReactDOMServer-dev.classic.js +3.12% 333.11 kB 343.52 kB +2.10% 74.82 kB 76.39 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.min.js +1.25% 22.56 kB 22.84 kB +0.82% 8.02 kB 8.09 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.min.js +1.25% 22.56 kB 22.84 kB +0.82% 8.02 kB 8.09 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.min.js +1.25% 22.60 kB 22.89 kB +0.85% 8.04 kB 8.11 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.production.min.js +1.24% 22.75 kB 23.03 kB +0.79% 8.12 kB 8.19 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.production.min.js +1.24% 22.75 kB 23.03 kB +0.79% 8.12 kB 8.19 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.production.min.js +1.24% 22.79 kB 23.07 kB +0.79% 8.14 kB 8.20 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.min.js +1.23% 22.93 kB 23.22 kB +0.83% 8.11 kB 8.17 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.min.js +1.23% 22.93 kB 23.22 kB +0.83% 8.11 kB 8.17 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.min.js +1.23% 22.98 kB 23.26 kB +0.81% 8.12 kB 8.19 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +1.11% 83.57 kB 84.50 kB +0.69% 20.99 kB 21.14 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +1.11% 83.57 kB 84.50 kB +0.69% 20.99 kB 21.14 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +1.11% 83.63 kB 84.56 kB +0.69% 21.01 kB 21.16 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +1.09% 84.82 kB 85.75 kB +0.67% 21.07 kB 21.21 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +1.09% 84.82 kB 85.75 kB +0.67% 21.07 kB 21.21 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +1.09% 84.88 kB 85.81 kB +0.66% 21.09 kB 21.23 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.development.js +1.08% 87.76 kB 88.71 kB +0.70% 21.24 kB 21.39 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.development.js +1.08% 87.76 kB 88.71 kB +0.70% 21.24 kB 21.39 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.development.js +1.08% 87.82 kB 88.77 kB +0.69% 21.27 kB 21.41 kB
oss-stable-semver/react-dom/cjs/react-dom-server.browser.development.js +0.87% 317.01 kB 319.77 kB +1.06% 72.88 kB 73.65 kB
oss-stable/react-dom/cjs/react-dom-server.browser.development.js +0.87% 317.03 kB 319.79 kB +1.05% 72.90 kB 73.67 kB
oss-experimental/react-dom/cjs/react-dom-static.browser.development.js +0.87% 317.63 kB 320.39 kB +1.04% 73.07 kB 73.83 kB
oss-stable-semver/react-dom/umd/react-dom-server.browser.development.js +0.87% 332.42 kB 335.31 kB +1.05% 73.63 kB 74.41 kB
oss-stable/react-dom/umd/react-dom-server.browser.development.js +0.87% 332.44 kB 335.34 kB +1.05% 73.66 kB 74.43 kB
oss-stable-semver/react-dom/cjs/react-dom-server.node.development.js +0.87% 318.23 kB 321.00 kB +1.06% 72.82 kB 73.59 kB
oss-stable/react-dom/cjs/react-dom-server.node.development.js +0.87% 318.26 kB 321.02 kB +1.05% 72.85 kB 73.61 kB
oss-experimental/react-dom/cjs/react-dom-server.browser.development.js +0.87% 318.32 kB 321.09 kB +1.05% 73.25 kB 74.02 kB
oss-experimental/react-dom/umd/react-dom-server.browser.development.js +0.87% 333.82 kB 336.71 kB +1.05% 74.00 kB 74.78 kB
oss-experimental/react-dom/cjs/react-dom-static.node.development.js +0.87% 319.51 kB 322.27 kB +1.04% 73.29 kB 74.05 kB
oss-experimental/react-dom/cjs/react-dom-server.node.development.js +0.87% 319.55 kB 322.31 kB +1.04% 73.20 kB 73.96 kB
oss-stable-semver/react-dom/umd/react-dom-server.browser.production.min.js +0.71% 51.66 kB 52.02 kB +1.10% 16.67 kB 16.85 kB
oss-stable/react-dom/umd/react-dom-server.browser.production.min.js +0.71% 51.68 kB 52.05 kB +1.11% 16.69 kB 16.87 kB
oss-experimental/react-dom/umd/react-dom-server.browser.production.min.js +0.71% 52.00 kB 52.37 kB +1.11% 16.80 kB 16.99 kB
oss-stable-semver/react-dom/cjs/react-dom-server.browser.production.min.js +0.69% 51.60 kB 51.95 kB +0.69% 16.42 kB 16.54 kB
oss-stable/react-dom/cjs/react-dom-server.browser.production.min.js +0.69% 51.62 kB 51.98 kB +0.69% 16.45 kB 16.56 kB
oss-experimental/react-dom/cjs/react-dom-static.browser.production.min.js +0.68% 51.83 kB 52.18 kB +0.68% 16.53 kB 16.64 kB
oss-experimental/react-dom/cjs/react-dom-server.browser.production.min.js +0.68% 51.95 kB 52.30 kB +0.69% 16.58 kB 16.69 kB
oss-stable-semver/react-dom/umd/react-dom-server-legacy.browser.development.js +0.67% 332.55 kB 334.78 kB +0.96% 73.26 kB 73.96 kB
oss-stable/react-dom/umd/react-dom-server-legacy.browser.development.js +0.67% 332.57 kB 334.80 kB +0.96% 73.28 kB 73.98 kB
oss-stable-semver/react-dom/cjs/react-dom-server-legacy.browser.development.js +0.67% 317.14 kB 319.26 kB +0.95% 72.48 kB 73.17 kB
oss-stable/react-dom/cjs/react-dom-server-legacy.browser.development.js +0.67% 317.16 kB 319.28 kB +0.95% 72.51 kB 73.20 kB
oss-experimental/react-dom/umd/react-dom-server-legacy.browser.development.js +0.67% 333.95 kB 336.18 kB +0.96% 73.63 kB 74.33 kB
oss-experimental/react-dom/cjs/react-dom-server-legacy.browser.development.js +0.67% 318.46 kB 320.58 kB +0.95% 72.86 kB 73.55 kB
oss-stable-semver/react-dom/cjs/react-dom-server-legacy.node.development.js +0.66% 318.85 kB 320.97 kB +0.94% 72.95 kB 73.64 kB
oss-stable/react-dom/cjs/react-dom-server-legacy.node.development.js +0.66% 318.87 kB 320.99 kB +0.94% 72.97 kB 73.66 kB
oss-experimental/react-dom/cjs/react-dom-server-legacy.node.development.js +0.66% 320.17 kB 322.29 kB +0.94% 73.33 kB 74.01 kB
oss-stable-semver/react-dom/cjs/react-dom-server.node.production.min.js +0.64% 55.90 kB 56.26 kB +0.66% 17.75 kB 17.86 kB
oss-stable/react-dom/cjs/react-dom-server.node.production.min.js +0.63% 55.92 kB 56.28 kB +0.65% 17.77 kB 17.88 kB
oss-experimental/react-dom/cjs/react-dom-server.node.production.min.js +0.63% 56.31 kB 56.67 kB +0.59% 17.92 kB 18.03 kB
oss-experimental/react-dom/cjs/react-dom-static.node.production.min.js +0.63% 56.32 kB 56.67 kB +0.57% 17.92 kB 18.02 kB
oss-stable-semver/react-dom/cjs/react-dom-server.bun.development.js +0.61% 314.66 kB 316.58 kB +0.87% 72.14 kB 72.76 kB
oss-stable/react-dom/cjs/react-dom-server.bun.development.js +0.61% 314.69 kB 316.61 kB +0.86% 72.16 kB 72.78 kB
oss-experimental/react-dom/cjs/react-dom-server.bun.development.js +0.61% 315.98 kB 317.90 kB +0.87% 72.51 kB 73.14 kB

Generated by :no_entry_sign: dangerJS against f35926fdbe4c415467a7622b80b3ea83e03dbd78

sizebot avatar Oct 05 '22 22:10 sizebot

@acdlite @gnoff @sebmarkbage Thanks for all the feedback so far! All suggested changes have been made, and I'd love to get some feedback on this again 🙂

mofeiZ avatar Nov 03 '22 20:11 mofeiZ

Thanks @sebmarkbage @gnoff, I really appreciate all the feedback you've given - I definitely learned a lot writing this PR! Sorry for the long wait (I wanted to confirm that these changes worked for www).

Would love one more (possibly last?) pass 🙂

mofeiZ avatar Nov 18 '22 00:11 mofeiZ

Also had a question about https://github.com/facebook/react/pull/25437#discussion_r1018398657

I think going forward our suggestion for rendering React only to part of the tree will be an API that treats and existing ID as the target for the shell but assume that the streamed content gets concatenated to the body.

Why do we assume that streamed content gets concatenated to the body? Trying to understand what could go wrong with concatenating streamed content to a div container instead

mofeiZ avatar Nov 18 '22 00:11 mofeiZ

@gnoff @sebmarkbage ping for review 🙂

mofeiZ avatar Nov 29 '22 22:11 mofeiZ

(Sorry for the back and forth, and thanks again for the review! Once again putting this back on your queue @gnoff )

mofeiZ avatar Nov 30 '22 03:11 mofeiZ

(Sorry for the back and forth, and thanks again for the review! Once again putting this back on your queue @gnoff )

mofeiZ avatar Nov 30 '22 03:11 mofeiZ