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

Refactor Flight Encoding #26082

Merged
merged 6 commits into from
Jan 31, 2023
Merged

Conversation

sebmarkbage
Copy link
Collaborator

This is just shifting around some encoding strategies for Flight in preparation for more types.

S1:"react.suspense"
J2:["$", "$1", {children: "@3"}]
J3:"Hello"
1:"$Sreact.suspense"
2:["$", "$1", {children: "$L3"}]
3:"Hello"

These are lazy references to future values. We currently claim both
$ and @ as special symbols for encoding our instructions in JSON.
We don't need two, and two are not enough anyway.
JSON always starts with a punctuator or number, so there's no conflict
with the other tags.

Makes the output a little smaller and easier to read.
This frees up the M up for Maps.
The serialization still emits it as a separate row since it's likely to
be reused later.
We still emit it as a separate row in case it's reused but it's not needed.
@sebmarkbage sebmarkbage requested a review from gnoff January 31, 2023 04:50
@facebook-github-bot facebook-github-bot added CLA Signed React Core Team Opened by a member of the React Core Team labels Jan 31, 2023
@react-sizebot
Copy link

Comparing: 1f5ce59...70963f8

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.83 kB 154.83 kB = 49.11 kB 49.11 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js = 156.83 kB 156.83 kB = 49.77 kB 49.77 kB
facebook-www/ReactDOM-prod.classic.js = 533.17 kB 533.17 kB = 94.97 kB 94.97 kB
facebook-www/ReactDOM-prod.modern.js = 518.27 kB 518.27 kB = 92.73 kB 92.73 kB
facebook-www/ReactFlightDOMRelayClient-prod.classic.js +4.82% 10.35 kB 10.85 kB +6.45% 2.67 kB 2.84 kB
facebook-www/ReactFlightDOMRelayClient-prod.modern.js +4.82% 10.35 kB 10.85 kB +6.45% 2.67 kB 2.84 kB
facebook-relay/flight/ReactFlightNativeRelayClient-prod.js +4.82% 10.36 kB 10.86 kB +6.34% 2.67 kB 2.84 kB
oss-experimental/react-client/cjs/react-client-flight.production.min.js = 5.55 kB 5.44 kB = 2.22 kB 2.20 kB
oss-stable-semver/react-client/cjs/react-client-flight.production.min.js = 5.55 kB 5.44 kB = 2.22 kB 2.20 kB
oss-stable/react-client/cjs/react-client-flight.production.min.js = 5.55 kB 5.44 kB = 2.22 kB 2.20 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-client.development.js = 26.32 kB 25.74 kB = 6.55 kB 6.46 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-client.development.js = 26.32 kB 25.74 kB = 6.55 kB 6.46 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-client.development.js = 26.32 kB 25.74 kB = 6.55 kB 6.46 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.development.js = 24.65 kB 24.09 kB = 6.42 kB 6.33 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.development.js = 24.65 kB 24.09 kB = 6.42 kB 6.33 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.development.js = 24.65 kB 24.09 kB = 6.42 kB 6.33 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-client.production.min.js = 6.90 kB 6.72 kB = 2.77 kB 2.71 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-client.production.min.js = 6.90 kB 6.72 kB = 2.77 kB 2.71 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-client.production.min.js = 6.90 kB 6.72 kB = 2.77 kB 2.71 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.production.min.js = 6.69 kB 6.51 kB = 2.67 kB 2.60 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.production.min.js = 6.69 kB 6.51 kB = 2.67 kB 2.60 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.production.min.js = 6.69 kB 6.51 kB = 2.67 kB 2.60 kB
oss-experimental/react-client/cjs/react-client-flight.development.js = 20.40 kB 19.85 kB = 5.44 kB 5.35 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js = 20.40 kB 19.85 kB = 5.44 kB 5.35 kB
oss-stable/react-client/cjs/react-client-flight.development.js = 20.40 kB 19.85 kB = 5.44 kB 5.35 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
facebook-www/ReactFlightDOMRelayClient-prod.classic.js +4.82% 10.35 kB 10.85 kB +6.45% 2.67 kB 2.84 kB
facebook-www/ReactFlightDOMRelayClient-prod.modern.js +4.82% 10.35 kB 10.85 kB +6.45% 2.67 kB 2.84 kB
facebook-relay/flight/ReactFlightNativeRelayClient-prod.js +4.82% 10.36 kB 10.86 kB +6.34% 2.67 kB 2.84 kB
facebook-www/ReactFlightDOMRelayClient-dev.classic.js +0.79% 17.63 kB 17.77 kB +2.69% 4.57 kB 4.70 kB
facebook-www/ReactFlightDOMRelayClient-dev.modern.js +0.79% 17.63 kB 17.77 kB +2.69% 4.57 kB 4.70 kB
facebook-relay/flight/ReactFlightNativeRelayClient-dev.js +0.78% 17.71 kB 17.85 kB +2.72% 4.59 kB 4.71 kB
facebook-relay/flight/ReactFlightNativeRelayServer-dev.js +0.31% 57.95 kB 58.13 kB +0.19% 14.41 kB 14.44 kB
facebook-www/ReactFlightDOMRelayServer-dev.classic.js +0.24% 73.47 kB 73.65 kB +0.16% 18.18 kB 18.21 kB
facebook-www/ReactFlightDOMRelayServer-dev.modern.js +0.24% 73.53 kB 73.70 kB +0.16% 18.20 kB 18.23 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.min.js = 22.91 kB 22.86 kB = 8.11 kB 8.10 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.min.js = 22.86 kB 22.81 kB = 8.09 kB 8.08 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.min.js = 22.86 kB 22.81 kB = 8.09 kB 8.08 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.production.min.js = 23.09 kB 23.04 kB = 8.21 kB 8.20 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.production.min.js = 23.05 kB 23.00 kB = 8.19 kB 8.18 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-server.browser.production.min.js = 23.05 kB 23.00 kB = 8.19 kB 8.18 kB
oss-experimental/react-server/cjs/react-server-flight.production.min.js = 13.92 kB 13.88 kB = 5.16 kB 5.15 kB
oss-stable-semver/react-server/cjs/react-server-flight.production.min.js = 13.92 kB 13.88 kB = 5.16 kB 5.15 kB
oss-stable/react-server/cjs/react-server-flight.production.min.js = 13.92 kB 13.88 kB = 5.16 kB 5.15 kB
oss-experimental/react-client/cjs/react-client-flight.production.min.js = 5.55 kB 5.44 kB = 2.22 kB 2.20 kB
oss-stable-semver/react-client/cjs/react-client-flight.production.min.js = 5.55 kB 5.44 kB = 2.22 kB 2.20 kB
oss-stable/react-client/cjs/react-client-flight.production.min.js = 5.55 kB 5.44 kB = 2.22 kB 2.20 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-client.development.js = 26.32 kB 25.74 kB = 6.55 kB 6.46 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-client.development.js = 26.32 kB 25.74 kB = 6.55 kB 6.46 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-client.development.js = 26.32 kB 25.74 kB = 6.55 kB 6.46 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.development.js = 24.65 kB 24.09 kB = 6.42 kB 6.33 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.development.js = 24.65 kB 24.09 kB = 6.42 kB 6.33 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.development.js = 24.65 kB 24.09 kB = 6.42 kB 6.33 kB
oss-experimental/react-server-dom-webpack/umd/react-server-dom-webpack-client.production.min.js = 6.90 kB 6.72 kB = 2.77 kB 2.71 kB
oss-stable-semver/react-server-dom-webpack/umd/react-server-dom-webpack-client.production.min.js = 6.90 kB 6.72 kB = 2.77 kB 2.71 kB
oss-stable/react-server-dom-webpack/umd/react-server-dom-webpack-client.production.min.js = 6.90 kB 6.72 kB = 2.77 kB 2.71 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-client.production.min.js = 6.69 kB 6.51 kB = 2.67 kB 2.60 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-client.production.min.js = 6.69 kB 6.51 kB = 2.67 kB 2.60 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-client.production.min.js = 6.69 kB 6.51 kB = 2.67 kB 2.60 kB
oss-experimental/react-client/cjs/react-client-flight.development.js = 20.40 kB 19.85 kB = 5.44 kB 5.35 kB
oss-stable-semver/react-client/cjs/react-client-flight.development.js = 20.40 kB 19.85 kB = 5.44 kB 5.35 kB
oss-stable/react-client/cjs/react-client-flight.development.js = 20.40 kB 19.85 kB = 5.44 kB 5.35 kB

Generated by 🚫 dangerJS against 70963f8

@@ -36,33 +34,20 @@ function processFullRow(response: Response, row: string): void {
if (row === '') {
return;
}
const tag = row[0];
const colon = row.indexOf(':', 0);
Copy link
Collaborator

Choose a reason for hiding this comment

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

are you leaving the position argument in place to be emphatic that it searches the whole string?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

No reason really other than why not be explicit and I’m not sure this will last. Eg might be continuing from a partial string when we optimize this a bit.

@sebmarkbage sebmarkbage merged commit 977bccd into facebook:main Jan 31, 2023
facebook-github-bot pushed a commit to facebook/react-native that referenced this pull request Feb 15, 2023
Summary:
This sync includes the following changes:
- **[86c8c8db7](facebook/react@86c8c8db7 )**: test: Don't retry flushActWork if flushUntilNextPaint threw ([#26121](facebook/react#26121)) //<Sebastian Silbermann>//
- **[64acd3918](facebook/react@64acd3918 )**: remove unguarded getRootNode call ([#26152](facebook/react#26152)) //<Josh Story>//
- **[71cace4d3](facebook/react@71cace4d3 )**: Migrate testRunner from jasmine2 to jest-circus ([#26144](facebook/react#26144)) //<Ming Ye>//
- **[c8510227c](facebook/react@c8510227c )**: Treat displayName as undefined ([#26148](facebook/react#26148)) //<Sebastian Markbåge>//
- **[55542bc73](facebook/react@55542bc73 )**: Update jest printBasicPrototype config ([#26142](facebook/react#26142)) //<Ming Ye>//
- **[6396b6641](facebook/react@6396b6641 )**: Model Float on Hoistables semantics ([#26106](facebook/react#26106)) //<Josh Story>//
- **[ef9f6e77b](facebook/react@ef9f6e77b )**: Enable passing Server References from Server to Client ([#26124](facebook/react#26124)) //<Sebastian Markbåge>//
- **[35698311d](facebook/react@35698311d )**: Update jest escapeString config ([#26140](facebook/react#26140)) //<Ming Ye>//
- **[6ddcbd4f9](facebook/react@6ddcbd4f9 )**: [flow] enable LTI inference mode ([#26104](facebook/react#26104)) //<Jan Kassens>//
- **[53b1f69ba](facebook/react@53b1f69ba )**: Implement unstable_getBoundingClientRect in RN Fabric refs ([#26137](facebook/react#26137)) //<Rubén Norte>//
- **[594093496](facebook/react@594093496 )**: Update to Jest 29 ([#26088](facebook/react#26088)) //<Ming Ye>//
- **[28fcae062](facebook/react@28fcae062 )**: Add support for SVG `transformOrigin` prop ([#26130](facebook/react#26130)) //<Aravind D>//
- **[3ff1540e9](facebook/react@3ff1540e9 )**: Prefer JSX in ReactNoop assertions (to combat out-of-memory test runs) ([#26127](facebook/react#26127)) //<Sebastian Silbermann>//
- **[01a0c4e12](facebook/react@01a0c4e12 )**: Add Edge Server Builds for workerd / edge-light ([#26116](facebook/react#26116)) //<Sebastian Markbåge>//
- **[f0cf832e1](facebook/react@f0cf832e1 )**: Update Flight Fixture to "use client" instead of .client.js ([#26118](facebook/react#26118)) //<Sebastian Markbåge>//
- **[03a216070](facebook/react@03a216070 )**: Rename "dom" fork to "dom-node" and "bun" fork to "dom-bun" ([#26117](facebook/react#26117)) //<Sebastian Markbåge>//
- **[4bf2113a1](facebook/react@4bf2113a1 )**: Revert "Move the Webpack manifest config to one level deeper ([#26083](facebook/react#26083))"  ([#26111](facebook/react#26111)) //<Sebastian Markbåge>//
- **[2ef24145e](facebook/react@2ef24145e )**: [flow] upgrade to 0.199.0 ([#26096](facebook/react#26096)) //<Jan Kassens>//
- **[922dd7ba5](facebook/react@922dd7ba5 )**: Revert the outer module object to an object ([#26093](facebook/react#26093)) //<Sebastian Markbåge>//
- **[9d111ffdf](facebook/react@9d111ffdf )**: Serialize Promises through Flight ([#26086](facebook/react#26086)) //<Sebastian Markbåge>//
- **[0ba4698c7](facebook/react@0ba4698c7 )**: Fix async test in React reconciler ([#26087](facebook/react#26087)) //<Ming Ye>//
- **[8c234c0de](facebook/react@8c234c0de )**: Move the Webpack manifest config to one level deeper ([#26083](facebook/react#26083)) //<Sebastian Markbåge>//
- **[977bccd24](facebook/react@977bccd24 )**: Refactor Flight Encoding ([#26082](facebook/react#26082)) //<Sebastian Markbåge>//
- **[d7bb524ad](facebook/react@d7bb524ad )**: [cleanup] Remove unused package jest-mock-scheduler ([#26084](facebook/react#26084)) //<Ming Ye>//
- **[6b3083266](facebook/react@6b3083266 )**: Upgrade prettier ([#26081](facebook/react#26081)) //<Jan Kassens>//
- **[1f5ce59dd](facebook/react@1f5ce59dd )**: [cleanup] fully roll out warnAboutSpreadingKeyToJSX ([#26080](facebook/react#26080)) //<Jan Kassens>//

Changelog:
[General][Changed] - React Native sync for revisions 48b687f...fccf3a9

jest_e2e[run_all_tests]

Reviewed By: rubennorte

Differential Revision: D43305607

fbshipit-source-id: 8da7567ca2a182f4be27788935c2da30a731f83b
OlimpiaZurek pushed a commit to OlimpiaZurek/react-native that referenced this pull request May 22, 2023
Summary:
This sync includes the following changes:
- **[86c8c8db7](facebook/react@86c8c8db7 )**: test: Don't retry flushActWork if flushUntilNextPaint threw ([facebook#26121](facebook/react#26121)) //<Sebastian Silbermann>//
- **[64acd3918](facebook/react@64acd3918 )**: remove unguarded getRootNode call ([facebook#26152](facebook/react#26152)) //<Josh Story>//
- **[71cace4d3](facebook/react@71cace4d3 )**: Migrate testRunner from jasmine2 to jest-circus ([facebook#26144](facebook/react#26144)) //<Ming Ye>//
- **[c8510227c](facebook/react@c8510227c )**: Treat displayName as undefined ([facebook#26148](facebook/react#26148)) //<Sebastian Markbåge>//
- **[55542bc73](facebook/react@55542bc73 )**: Update jest printBasicPrototype config ([facebook#26142](facebook/react#26142)) //<Ming Ye>//
- **[6396b6641](facebook/react@6396b6641 )**: Model Float on Hoistables semantics ([facebook#26106](facebook/react#26106)) //<Josh Story>//
- **[ef9f6e77b](facebook/react@ef9f6e77b )**: Enable passing Server References from Server to Client ([facebook#26124](facebook/react#26124)) //<Sebastian Markbåge>//
- **[35698311d](facebook/react@35698311d )**: Update jest escapeString config ([facebook#26140](facebook/react#26140)) //<Ming Ye>//
- **[6ddcbd4f9](facebook/react@6ddcbd4f9 )**: [flow] enable LTI inference mode ([facebook#26104](facebook/react#26104)) //<Jan Kassens>//
- **[53b1f69ba](facebook/react@53b1f69ba )**: Implement unstable_getBoundingClientRect in RN Fabric refs ([facebook#26137](facebook/react#26137)) //<Rubén Norte>//
- **[594093496](facebook/react@594093496 )**: Update to Jest 29 ([facebook#26088](facebook/react#26088)) //<Ming Ye>//
- **[28fcae062](facebook/react@28fcae062 )**: Add support for SVG `transformOrigin` prop ([facebook#26130](facebook/react#26130)) //<Aravind D>//
- **[3ff1540e9](facebook/react@3ff1540e9 )**: Prefer JSX in ReactNoop assertions (to combat out-of-memory test runs) ([facebook#26127](facebook/react#26127)) //<Sebastian Silbermann>//
- **[01a0c4e12](facebook/react@01a0c4e12 )**: Add Edge Server Builds for workerd / edge-light ([facebook#26116](facebook/react#26116)) //<Sebastian Markbåge>//
- **[f0cf832e1](facebook/react@f0cf832e1 )**: Update Flight Fixture to "use client" instead of .client.js ([facebook#26118](facebook/react#26118)) //<Sebastian Markbåge>//
- **[03a216070](facebook/react@03a216070 )**: Rename "dom" fork to "dom-node" and "bun" fork to "dom-bun" ([facebook#26117](facebook/react#26117)) //<Sebastian Markbåge>//
- **[4bf2113a1](facebook/react@4bf2113a1 )**: Revert "Move the Webpack manifest config to one level deeper ([facebook#26083](facebook/react#26083))"  ([facebook#26111](facebook/react#26111)) //<Sebastian Markbåge>//
- **[2ef24145e](facebook/react@2ef24145e )**: [flow] upgrade to 0.199.0 ([facebook#26096](facebook/react#26096)) //<Jan Kassens>//
- **[922dd7ba5](facebook/react@922dd7ba5 )**: Revert the outer module object to an object ([facebook#26093](facebook/react#26093)) //<Sebastian Markbåge>//
- **[9d111ffdf](facebook/react@9d111ffdf )**: Serialize Promises through Flight ([facebook#26086](facebook/react#26086)) //<Sebastian Markbåge>//
- **[0ba4698c7](facebook/react@0ba4698c7 )**: Fix async test in React reconciler ([facebook#26087](facebook/react#26087)) //<Ming Ye>//
- **[8c234c0de](facebook/react@8c234c0de )**: Move the Webpack manifest config to one level deeper ([facebook#26083](facebook/react#26083)) //<Sebastian Markbåge>//
- **[977bccd24](facebook/react@977bccd24 )**: Refactor Flight Encoding ([facebook#26082](facebook/react#26082)) //<Sebastian Markbåge>//
- **[d7bb524ad](facebook/react@d7bb524ad )**: [cleanup] Remove unused package jest-mock-scheduler ([facebook#26084](facebook/react#26084)) //<Ming Ye>//
- **[6b3083266](facebook/react@6b3083266 )**: Upgrade prettier ([facebook#26081](facebook/react#26081)) //<Jan Kassens>//
- **[1f5ce59dd](facebook/react@1f5ce59dd )**: [cleanup] fully roll out warnAboutSpreadingKeyToJSX ([facebook#26080](facebook/react#26080)) //<Jan Kassens>//

Changelog:
[General][Changed] - React Native sync for revisions 48b687f...fccf3a9

jest_e2e[run_all_tests]

Reviewed By: rubennorte

Differential Revision: D43305607

fbshipit-source-id: 8da7567ca2a182f4be27788935c2da30a731f83b
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.

4 participants