-
Notifications
You must be signed in to change notification settings - Fork 26.1k
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
fix: fetch() behavior when "dynamic" is "force-dynamic #58484
Conversation
23a1007
to
76dec82
Compare
76dec82
to
e691cfb
Compare
e691cfb
to
9bc4514
Compare
Stats from current PRDefault BuildGeneral Overall increase
|
vercel/next.js canary | mugi-uno/next.js fix-force-dynamic | Change | |
---|---|---|---|
buildDuration | 10.4s | 10.3s | N/A |
buildDurationCached | 6s | 6.6s | |
nodeModulesSize | 199 MB | 199 MB | |
nextStartRea..uration (ms) | 420ms | 418ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | mugi-uno/next.js fix-force-dynamic | Change | |
---|---|---|---|
199-HASH.js gzip | 28.8 kB | 28.8 kB | N/A |
3f784ff6-HASH.js gzip | 53.3 kB | 53.3 kB | ✓ |
494.HASH.js gzip | 180 B | 181 B | N/A |
framework-HASH.js gzip | 45.2 kB | 45.2 kB | ✓ |
main-app-HASH.js gzip | 241 B | 238 B | N/A |
main-HASH.js gzip | 31.7 kB | 31.8 kB | N/A |
webpack-HASH.js gzip | 1.7 kB | 1.7 kB | ✓ |
Overall change | 100 kB | 100 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | mugi-uno/next.js fix-force-dynamic | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
Overall change | 31 kB | 31 kB | ✓ |
Client Pages
vercel/next.js canary | mugi-uno/next.js fix-force-dynamic | 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 | 504 B | 506 B | N/A |
css-HASH.js gzip | 322 B | 323 B | N/A |
dynamic-HASH.js gzip | 2.5 kB | 2.5 kB | ✓ |
edge-ssr-HASH.js gzip | 253 B | 255 B | N/A |
head-HASH.js gzip | 348 B | 347 B | N/A |
hooks-HASH.js gzip | 369 B | 368 B | N/A |
image-HASH.js gzip | 4.3 kB | 4.3 kB | N/A |
index-HASH.js gzip | 256 B | 256 B | ✓ |
link-HASH.js gzip | 2.63 kB | 2.63 kB | N/A |
routerDirect..HASH.js gzip | 311 B | 311 B | ✓ |
script-HASH.js gzip | 384 B | 383 B | N/A |
withRouter-HASH.js gzip | 307 B | 308 B | N/A |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 3.17 kB | 3.17 kB | ✓ |
Client Build Manifests
vercel/next.js canary | mugi-uno/next.js fix-force-dynamic | Change | |
---|---|---|---|
_buildManifest.js gzip | 484 B | 483 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | mugi-uno/next.js fix-force-dynamic | Change | |
---|---|---|---|
index.html gzip | 528 B | 527 B | N/A |
link.html gzip | 539 B | 540 B | N/A |
withRouter.html gzip | 525 B | 522 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Edge SSR bundle Size
vercel/next.js canary | mugi-uno/next.js fix-force-dynamic | Change | |
---|---|---|---|
edge-ssr.js gzip | 92.6 kB | 92.6 kB | N/A |
page.js gzip | 145 kB | 145 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | mugi-uno/next.js fix-force-dynamic | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 626 B | 625 B | N/A |
middleware-r..fest.js gzip | 150 B | 151 B | N/A |
middleware.js gzip | 24.8 kB | 24.8 kB | N/A |
edge-runtime..pack.js gzip | 1.92 kB | 1.92 kB | ✓ |
Overall change | 1.92 kB | 1.92 kB | ✓ |
Next Runtimes
vercel/next.js canary | mugi-uno/next.js fix-force-dynamic | Change | |
---|---|---|---|
app-page-exp...dev.js gzip | 167 kB | 167 kB | ✓ |
app-page-exp..prod.js gzip | 93.4 kB | 93.4 kB | ✓ |
app-page-tur..prod.js gzip | 94.1 kB | 94.1 kB | ✓ |
app-page-tur..prod.js gzip | 88.7 kB | 88.7 kB | ✓ |
app-page.run...dev.js gzip | 137 kB | 137 kB | ✓ |
app-page.run..prod.js gzip | 88 kB | 88 kB | ✓ |
app-route-ex...dev.js gzip | 23.8 kB | 23.8 kB | N/A |
app-route-ex..prod.js gzip | 16.4 kB | 16.4 kB | N/A |
app-route-tu..prod.js gzip | 16.4 kB | 16.5 kB | N/A |
app-route-tu..prod.js gzip | 16 kB | 16 kB | N/A |
app-route.ru...dev.js gzip | 23.2 kB | 23.2 kB | N/A |
app-route.ru..prod.js gzip | 16 kB | 16 kB | N/A |
pages-api-tu..prod.js gzip | 9.37 kB | 9.37 kB | ✓ |
pages-api.ru...dev.js gzip | 9.64 kB | 9.64 kB | ✓ |
pages-api.ru..prod.js gzip | 9.37 kB | 9.37 kB | ✓ |
pages-turbo...prod.js gzip | 21.8 kB | 21.8 kB | ✓ |
pages.runtim...dev.js gzip | 22.5 kB | 22.5 kB | ✓ |
pages.runtim..prod.js gzip | 21.8 kB | 21.8 kB | ✓ |
server.runti..prod.js gzip | 49.1 kB | 49.1 kB | ✓ |
Overall change | 812 kB | 812 kB | ✓ |
Diff details
Diff for page.js
Diff too large to display
Diff for app-route-ex..ntime.dev.js
Diff too large to display
Diff for app-route-ex..time.prod.js
Diff too large to display
Diff for app-route-tu..time.prod.js
Diff too large to display
Diff for app-route-tu..time.prod.js
Diff too large to display
Diff for app-route.runtime.dev.js
Diff too large to display
Diff for app-route.ru..time.prod.js
Diff too large to display
Tests Passed |
Thanks for working on this! I think the change makes sense, just need to update a few snapshots 🙏 |
8903822
to
b4a921f
Compare
@ztanner |
b4a921f
to
8209c8c
Compare
9bda64c
to
c89088a
Compare
@@ -1,4 +1,4 @@ | |||
export const dynamic = 'force-dynamic' | |||
export const revalidate = 0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated this so that the existing test that relies on dynamic rendering is preserved. We're able to do this because revalidate: 0
won't adjust fetch cache behavior if the fetch itself has a revalidate parameter (docs)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks! 🙏
Reverts #58484 The correct way to address this is to use the `fetchCache` segment: https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config#fetchcache There are valid use-cases to want to force a dynamic response but still need fetch caching. Additionally, this PR updates the docs, since they're incorrect about behavior. [slack x-ref](https://vercel.slack.com/archives/C042LHPJ1NX/p1691623048477119?thread_ts=1691613915.257239&cid=C042LHPJ1NX)
What?
I changed the behavior of fetch() when 'force-dynamic' is specified in the
dynamic
of Route Segment Config to be similar to when 'force-no-store' is specified infetchCache
.Why?
The document (https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config#dynamic) contains an explanation that when 'force-dynamic' is specified for
dynamic
, it will behave equivalently to the following:I tried to correct it because it was not actually behaving this way.
How?
When determining if
fetchCache
is 'force-no-store', I have modified the code to also check thedynamic
setting.Fixes #47033