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

Skip client-side data-fetching after ssr error #51377

Merged
merged 11 commits into from
Feb 8, 2024

Conversation

tills13
Copy link
Contributor

@tills13 tills13 commented Jun 15, 2023

Fixes: #47978

When an error occurs in getInitialProps, the error page's getInitialProps is run server-side and returned in __NEXT_DATA__. Following, there's no need to re-run getInitialProps client-side on the hydrate pass.

@vercel-spaces vercel-spaces bot requested a review from huozhi June 15, 2023 23:19
Copy link
Member

@ijjk ijjk left a comment

Choose a reason for hiding this comment

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

Hi, this still should be logged depending on the case. The initial case you mentioned where it's a server-side error in production and the client doesn't have access to it seems like a fair case to not log it but should remain for runtime exceptions and others.

@tills13
Copy link
Contributor Author

tills13 commented Jun 16, 2023

@ijjk thanks for the response. The new solution fixes both aspects of the linked issue -- they turned out to be more closely related than I had originally thought.

If a server-side error occurs (e.g. throwing in getInitialProps or during render) the error is logged in its entirety on the server. I will leave this unchanged though that might not be desirable for people using a structured logger / log parser (Insights, for example).

The _error page is rendered server-side, so for the hydration pass, the only thing that needs to happen is hydration whereas before, the error page component would be fetched (no-op, already available from the initial request) and re-ran.

Copy link
Member

@ijjk ijjk left a comment

Choose a reason for hiding this comment

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

Could we add tests cases for the above to ensure it's behaving as expected?

@tills13 tills13 changed the title remove error output from renderError Skip client-side data-fetching after ssr error Jun 26, 2023
@tills13
Copy link
Contributor Author

tills13 commented Jul 12, 2023

@ijjk any further feedback on this?

@tills13
Copy link
Contributor Author

tills13 commented Aug 18, 2023

@ijjk sorry for the repeated bumps but any update on this? Or anything I can do to get this moving along? The JIRA ticket I have assigned to myself at work is looking a little sad / abandoned.

@TasukuUno
Copy link
Contributor

@ijjk Hi, I am also waiting for this change to be shipped. I would be happy if you could review it.

@TasukuUno
Copy link
Contributor

@ijjk Hi, any updates about this?

@ijjk
Copy link
Member

ijjk commented Feb 7, 2024

Tests Passed

@ijjk
Copy link
Member

ijjk commented Feb 7, 2024

Stats from current PR

Default Build
General Overall increase ⚠️
vercel/next.js canary tills13/next.js remove-error-page-debug Change
buildDuration 11s 11.1s N/A
buildDurationCached 6.2s 5.5s N/A
nodeModulesSize 318 MB 318 MB ⚠️ +2.64 kB
nextStartRea..uration (ms) 409ms 407ms N/A
Client Bundles (main, webpack)
vercel/next.js canary tills13/next.js remove-error-page-debug Change
3f784ff6-HASH.js gzip 53.4 kB 53.4 kB N/A
423.HASH.js gzip 185 B 181 B N/A
68-HASH.js gzip 29.6 kB 29.5 kB N/A
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 238 B 239 B N/A
main-HASH.js gzip 31.8 kB 31.8 kB N/A
webpack-HASH.js gzip 1.7 kB 1.7 kB
Overall change 46.9 kB 46.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary tills13/next.js remove-error-page-debug Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary tills13/next.js remove-error-page-debug Change
_app-HASH.js gzip 194 B 195 B N/A
_error-HASH.js gzip 182 B 181 B N/A
amp-HASH.js gzip 502 B 501 B N/A
css-HASH.js gzip 320 B 322 B N/A
dynamic-HASH.js gzip 2.5 kB 2.5 kB N/A
edge-ssr-HASH.js gzip 255 B 256 B N/A
head-HASH.js gzip 350 B 349 B N/A
hooks-HASH.js gzip 368 B 369 B N/A
image-HASH.js gzip 4.22 kB 4.21 kB N/A
index-HASH.js gzip 257 B 256 B N/A
link-HASH.js gzip 2.62 kB 2.61 kB N/A
routerDirect..HASH.js gzip 310 B 311 B N/A
script-HASH.js gzip 384 B 383 B N/A
withRouter-HASH.js gzip 306 B 308 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 106 B 106 B
Client Build Manifests
vercel/next.js canary tills13/next.js remove-error-page-debug Change
_buildManifest.js gzip 483 B 485 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary tills13/next.js remove-error-page-debug Change
index.html gzip 528 B 526 B N/A
link.html gzip 541 B 537 B N/A
withRouter.html gzip 523 B 521 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary tills13/next.js remove-error-page-debug Change
edge-ssr.js gzip 94 kB 94 kB N/A
page.js gzip 149 kB 149 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary tills13/next.js remove-error-page-debug Change
middleware-b..fest.js gzip 621 B 624 B N/A
middleware-r..fest.js gzip 151 B 149 B N/A
middleware.js gzip 47.4 kB 47.4 kB N/A
edge-runtime..pack.js gzip 1.94 kB 1.94 kB
Overall change 1.94 kB 1.94 kB
Next Runtimes
vercel/next.js canary tills13/next.js remove-error-page-debug Change
app-page-exp...dev.js gzip 166 kB 166 kB
app-page-exp..prod.js gzip 95.1 kB 95.1 kB
app-page-tur..prod.js gzip 96.9 kB 96.9 kB
app-page-tur..prod.js gzip 91.5 kB 91.5 kB
app-page.run...dev.js gzip 135 kB 135 kB
app-page.run..prod.js gzip 90 kB 90 kB
app-route-ex...dev.js gzip 22 kB 22 kB
app-route-ex..prod.js gzip 14.8 kB 14.8 kB
app-route-tu..prod.js gzip 14.8 kB 14.8 kB
app-route-tu..prod.js gzip 14.6 kB 14.6 kB
app-route.ru...dev.js gzip 21.7 kB 21.7 kB
app-route.ru..prod.js gzip 14.6 kB 14.6 kB
pages-api-tu..prod.js gzip 9.43 kB 9.43 kB
pages-api.ru...dev.js gzip 9.7 kB 9.7 kB
pages-api.ru..prod.js gzip 9.43 kB 9.43 kB
pages-turbo...prod.js gzip 22 kB 22 kB
pages.runtim...dev.js gzip 22.7 kB 22.7 kB
pages.runtim..prod.js gzip 22 kB 22 kB
server.runti..prod.js gzip 49.7 kB 49.7 kB
Overall change 922 kB 922 kB
Diff details
Diff for main-HASH.js

Diff too large to display

Commit: 8710a55

Copy link
Member

@ijjk ijjk left a comment

Choose a reason for hiding this comment

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

Hi, sorry for the delay here, re-triggered the test suite and it seems we have some failing cases. We need to ensure a breaking change isn't occurring here.

@tills13
Copy link
Contributor Author

tills13 commented Feb 7, 2024

I will take a look right now.

@tills13
Copy link
Contributor Author

tills13 commented Feb 7, 2024

not done yet, just unable to run tests on my machine. Syncing with another machine through Github.

@tills13
Copy link
Contributor Author

tills13 commented Feb 7, 2024

Hey @ijjk re: #45185 -- seems like Yarn is still needed for e2e tests here: https://github.com/vercel/next.js/blob/canary/test/lib/next-modes/next-dev.ts#L31-L36

The tests / gh actions install yarn here (I believe): https://github.com/vercel/next.js/blob/canary/.github/workflows/build_reusable.yml#L125

Or am I missing something running tests locally? Installing yarn allows me to run tests.

@tills13 tills13 requested a review from ijjk February 7, 2024 23:54
@tills13
Copy link
Contributor Author

tills13 commented Feb 7, 2024

ready for a re-review

Copy link
Member

@ijjk ijjk left a comment

Choose a reason for hiding this comment

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

Thanks for the PR!

@ijjk ijjk merged commit 70b78c2 into vercel:canary Feb 8, 2024
68 checks passed
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 22, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Undesirable custom error page behaviour (output + re-fetching data client-side)
3 participants