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

[Fizz] Expose a method to explicitly start writing to a Node stream #21028

Merged
merged 2 commits into from
Mar 18, 2021

Conversation

sebmarkbage
Copy link
Collaborator

@sebmarkbage sebmarkbage commented Mar 18, 2021

We use writable Node streams because it's the only one that lets us explicitly flush to the underlying sink. Especially when used with gzip.

However, we don't want to start writing to it until after the header has been received and perhaps part of the initial content like <head> has been written.

This PR makes it so that you have to explicitly call "startWriting" to start flushing to a Node stream. We'll later expose some various callbacks for when it might be a good idea to start.

For Browser streams, we don't need this API because we use readable streams there. There's no writable streams and the gzip problem doesn't have a solution there. For readable streams you can just wait to provide that stream to the sink until you're ready.

@sebmarkbage sebmarkbage requested a review from gaearon March 18, 2021 02:27
@facebook-github-bot facebook-github-bot added React Core Team Opened by a member of the React Core Team CLA Signed labels Mar 18, 2021
@sebmarkbage sebmarkbage changed the title [Fizz] Expose a method to explicitly start a Node stream [Fizz] Expose a method to explicitly start writing to a Node stream Mar 18, 2021
@sizebot
Copy link

sizebot commented Mar 18, 2021

Comparing: cf485e6...3036225

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 = 122.89 kB 122.89 kB = 39.55 kB 39.55 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js = 129.38 kB 129.38 kB = 41.61 kB 41.61 kB
facebook-www/ReactDOM-prod.classic.js = 409.01 kB 409.01 kB = 75.85 kB 75.85 kB
facebook-www/ReactDOM-prod.modern.js = 397.27 kB 397.27 kB = 73.91 kB 73.91 kB
facebook-www/ReactDOMForked-prod.classic.js = 409.02 kB 409.02 kB = 75.85 kB 75.85 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-noop-renderer/cjs/react-noop-renderer-server.development.js +0.80% 5.13 kB 5.17 kB +0.68% 1.47 kB 1.48 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-server.development.js +0.80% 5.13 kB 5.17 kB +0.68% 1.47 kB 1.48 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-server.production.min.js +0.73% 2.48 kB 2.50 kB +0.93% 0.97 kB 0.98 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-server.production.min.js +0.73% 2.48 kB 2.50 kB +0.93% 0.97 kB 0.98 kB
oss-experimental/react-dom/cjs/react-dom-unstable-fizz.node.production.min.js +0.59% 10.52 kB 10.58 kB +0.41% 3.90 kB 3.92 kB
oss-experimental/react-dom/umd/react-dom-unstable-fizz.browser.development.js = 49.61 kB 49.47 kB = 12.13 kB 12.08 kB
oss-experimental/react-dom/cjs/react-dom-unstable-fizz.browser.development.js = 47.11 kB 46.98 kB = 11.97 kB 11.91 kB
oss-experimental/react-server/cjs/react-server.development.js = 32.52 kB 32.38 kB = 8.39 kB 8.33 kB
oss-stable/react-server/cjs/react-server.development.js = 32.52 kB 32.38 kB = 8.39 kB 8.33 kB

Generated by 🚫 dangerJS against 3036225

Copy link
Collaborator

@gaearon gaearon left a comment

Choose a reason for hiding this comment

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

Do you want to write a test that does not immediately start writing?

@sebmarkbage sebmarkbage merged commit 154b852 into facebook:master Mar 18, 2021
zhengjitf pushed a commit to zhengjitf/react that referenced this pull request Mar 23, 2021
…acebook#21028)

* Expose an explicit point when to start writing in the Node API

* Add a previously failing test
facebook-github-bot pushed a commit to facebook/react-native that referenced this pull request Mar 23, 2021
Summary:
This sync includes the following changes:
- **[6d3ecb70d](facebook/react@6d3ecb70d )**: Remove unstable_changedBits ([#20953](facebook/react#20953)) //<Andrew Clark>//
- **[754e30728](facebook/react@754e30728 )**: Delete immediateQueueCallbackNode ([#20980](facebook/react#20980)) //<Andrew Clark>//
- **[be5a2e231](facebook/react@be5a2e231 )**: Land enableSyncMicrotasks ([#20979](facebook/react#20979)) //<Andrew Clark>//
- **[f6bc9c824](facebook/react@f6bc9c824 )**: [Fizz] Expose maxBoundarySize as an option ([#21029](facebook/react#21029)) //<Sebastian Markbåge>//
- **[154b85213](facebook/react@154b85213 )**: [Fizz] Expose a method to explicitly start writing to a Node stream ([#21028](facebook/react#21028)) //<Sebastian Markbåge>//
- **[cf485e6f6](facebook/react@cf485e6f6 )**: [Fizz] Expose a method to abort a pending request ([#21027](facebook/react#21027)) //<Sebastian Markbåge>//
- **[3fb11eed9](facebook/react@3fb11eed9 )**: React Native: Touch Instrumentation Interface ([#21024](facebook/react#21024)) //<Timothy Yung>//
- **[825c3021f](facebook/react@825c3021f )**: Don't delete trailing mismatches during hydration at the root ([#21021](facebook/react#21021)) //<Sebastian Markbåge>//
- **[1d1e49cfa](facebook/react@1d1e49cfa )**: [Fizz] Assign an ID to the first DOM element in a fallback or insert a dummy (and testing infra) ([#21020](facebook/react#21020)) //<Sebastian Markbåge>//
- **[466b26c92](facebook/react@466b26c92 )**: Store commit durations on HostRoot for DevTools access ([#20983](facebook/react#20983)) //<Brian Vaughn>//
- **[89acfa639](facebook/react@89acfa639 )**: Fix native event batching in concurrent mode ([#21010](facebook/react#21010)) //<Ricky>//
- **[0203b6567](facebook/react@0203b6567 )**: chore: update react-reconciler README ([#21016](facebook/react#21016)) //<susiwen8>//

Changelog:
[General][Changed] - React Native sync for revisions c9f6d0a...6d3ecb7

jest_e2e[run_all_tests]

Reviewed By: JoshuaGross, kacieb

Differential Revision: D27231625

fbshipit-source-id: 89c0c0662e69044ae8890486a693013bee6005dd
koto pushed a commit to koto/react that referenced this pull request Jun 15, 2021
…acebook#21028)

* Expose an explicit point when to start writing in the Node API

* Add a previously failing test
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