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] Only compute component stacks in DEV and prerenders #27850

Merged
merged 1 commit into from
Dec 19, 2023

Conversation

sebmarkbage
Copy link
Collaborator

If you have a lot of intentional throws (or postpones) from client-only rendering then computing the stack is too much.

@sebmarkbage sebmarkbage requested review from gnoff and acdlite December 19, 2023 22:53
@facebook-github-bot facebook-github-bot added CLA Signed React Core Team Opened by a member of the React Core Team labels Dec 19, 2023
@sebmarkbage sebmarkbage force-pushed the rmcomponentstacksinprod branch from de0af49 to 6b5f003 Compare December 19, 2023 22:54
Copy link
Contributor

@josephsavona josephsavona left a comment

Choose a reason for hiding this comment

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

Awesome, thanks for the quick fix!

@react-sizebot
Copy link

react-sizebot commented Dec 19, 2023

Comparing: cb24396...2b9fd01

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 = 175.90 kB 175.90 kB = 54.76 kB 54.75 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js = 177.97 kB 177.97 kB = 55.39 kB 55.39 kB
facebook-www/ReactDOM-prod.classic.js = 570.21 kB 570.21 kB = 100.35 kB 100.35 kB
facebook-www/ReactDOM-prod.modern.js = 554.06 kB 554.06 kB = 97.43 kB 97.43 kB
test_utils/ReactAllWarnings.js Deleted 67.55 kB 0.00 kB Deleted 16.54 kB 0.00 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
test_utils/ReactAllWarnings.js Deleted 67.55 kB 0.00 kB Deleted 16.54 kB 0.00 kB

Generated by 🚫 dangerJS against 2b9fd01

@sebmarkbage sebmarkbage force-pushed the rmcomponentstacksinprod branch from 6b5f003 to 2b9fd01 Compare December 19, 2023 22:59
@sebmarkbage sebmarkbage merged commit c5b9375 into facebook:main Dec 19, 2023
35 of 36 checks passed
github-actions bot pushed a commit that referenced this pull request Dec 19, 2023
If you have a lot of intentional throws (or postpones) from client-only
rendering then computing the stack is too much.

DiffTrain build for [c5b9375](c5b9375)
EdisonVan pushed a commit to EdisonVan/react that referenced this pull request Apr 15, 2024
…27850)

If you have a lot of intentional throws (or postpones) from client-only
rendering then computing the stack is too much.
bigfootjon pushed a commit that referenced this pull request Apr 18, 2024
If you have a lot of intentional throws (or postpones) from client-only
rendering then computing the stack is too much.

DiffTrain build for commit c5b9375.
sebmarkbage added a commit that referenced this pull request Jul 2, 2024
…30132)

When we added component stacks to Fizz in prod it severely slowed down
common cases where you intentionally are throwing error for purposes of
client rendering. Our parent component stack generation is very slow
since call components with fake errors to generate them.

Therefore we disabled them in prod but included them in prerenders.
#27850

However, we still kept generating data structures for them and the code
still exists there for the prerenders. We could stop generating the data
structures which are not completely free but also not crazy bad.

What we can do instead is just lazily generate the component stacks.
This is in fact what plain stacks do anyway. This doesn't work as well
in Fiber because the data structures are live but on the server they're
immutable so it's fine to do it later as well.

That way you can choose to not read this getter for intentionally thrown
errors - after inspecting the Error object - yet still get component
stacks in prod for other errors.
github-actions bot pushed a commit that referenced this pull request Jul 2, 2024
…30132)

When we added component stacks to Fizz in prod it severely slowed down
common cases where you intentionally are throwing error for purposes of
client rendering. Our parent component stack generation is very slow
since call components with fake errors to generate them.

Therefore we disabled them in prod but included them in prerenders.
#27850

However, we still kept generating data structures for them and the code
still exists there for the prerenders. We could stop generating the data
structures which are not completely free but also not crazy bad.

What we can do instead is just lazily generate the component stacks.
This is in fact what plain stacks do anyway. This doesn't work as well
in Fiber because the data structures are live but on the server they're
immutable so it's fine to do it later as well.

That way you can choose to not read this getter for intentionally thrown
errors - after inspecting the Error object - yet still get component
stacks in prod for other errors.

DiffTrain build for [e60063d](e60063d)
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