-
Notifications
You must be signed in to change notification settings - Fork 27.7k
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
[unstable_cache] Don't track dynamic fetches in an unstable_cache callback #65010
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Stats from current PRDefault Build (Increase detected
|
vercel/next.js canary | vercel/next.js wyattjohnson/unstable-cache-fetch | Change | |
---|---|---|---|
buildDuration | 18.5s | 16.8s | N/A |
buildDurationCached | 9.4s | 9.1s | N/A |
nodeModulesSize | 359 MB | 359 MB | |
nextStartRea..uration (ms) | 466ms | 464ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | vercel/next.js wyattjohnson/unstable-cache-fetch | Change | |
---|---|---|---|
1103-HASH.js gzip | 31.8 kB | 31.8 kB | N/A |
1a9f679d-HASH.js gzip | 53.5 kB | 53.5 kB | N/A |
335-HASH.js gzip | 5.09 kB | 5.09 kB | N/A |
7953.HASH.js gzip | 169 B | 169 B | ✓ |
framework-HASH.js gzip | 45.2 kB | 45.2 kB | ✓ |
main-app-HASH.js gzip | 230 B | 228 B | N/A |
main-HASH.js gzip | 31.5 kB | 31.5 kB | N/A |
webpack-HASH.js gzip | 1.65 kB | 1.65 kB | N/A |
Overall change | 45.4 kB | 45.4 kB | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vercel/next.js wyattjohnson/unstable-cache-fetch | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
Overall change | 31 kB | 31 kB | ✓ |
Client Pages
vercel/next.js canary | vercel/next.js wyattjohnson/unstable-cache-fetch | Change | |
---|---|---|---|
_app-HASH.js gzip | 192 B | 193 B | N/A |
_error-HASH.js gzip | 192 B | 193 B | N/A |
amp-HASH.js gzip | 507 B | 511 B | N/A |
css-HASH.js gzip | 341 B | 343 B | N/A |
dynamic-HASH.js gzip | 2.52 kB | 2.52 kB | ✓ |
edge-ssr-HASH.js gzip | 266 B | 265 B | N/A |
head-HASH.js gzip | 362 B | 365 B | N/A |
hooks-HASH.js gzip | 392 B | 392 B | ✓ |
image-HASH.js gzip | 4.32 kB | 4.32 kB | N/A |
index-HASH.js gzip | 268 B | 268 B | ✓ |
link-HASH.js gzip | 2.69 kB | 2.7 kB | N/A |
routerDirect..HASH.js gzip | 329 B | 328 B | N/A |
script-HASH.js gzip | 397 B | 397 B | ✓ |
withRouter-HASH.js gzip | 324 B | 324 B | ✓ |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 4 kB | 4 kB | ✓ |
Client Build Manifests
vercel/next.js canary | vercel/next.js wyattjohnson/unstable-cache-fetch | Change | |
---|---|---|---|
_buildManifest.js gzip | 483 B | 484 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | vercel/next.js wyattjohnson/unstable-cache-fetch | Change | |
---|---|---|---|
index.html gzip | 528 B | 528 B | ✓ |
link.html gzip | 540 B | 540 B | ✓ |
withRouter.html gzip | 523 B | 524 B | N/A |
Overall change | 1.07 kB | 1.07 kB | ✓ |
Edge SSR bundle Size
vercel/next.js canary | vercel/next.js wyattjohnson/unstable-cache-fetch | Change | |
---|---|---|---|
edge-ssr.js gzip | 94.7 kB | 94.7 kB | N/A |
page.js gzip | 3.07 kB | 3.06 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | vercel/next.js wyattjohnson/unstable-cache-fetch | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 623 B | 624 B | N/A |
middleware-r..fest.js gzip | 156 B | 156 B | ✓ |
middleware.js gzip | 27.9 kB | 27.9 kB | N/A |
edge-runtime..pack.js gzip | 839 B | 839 B | ✓ |
Overall change | 995 B | 995 B | ✓ |
Next Runtimes
vercel/next.js canary | vercel/next.js wyattjohnson/unstable-cache-fetch | Change | |
---|---|---|---|
app-page-exp...dev.js gzip | 171 kB | 171 kB | ✓ |
app-page-exp..prod.js gzip | 98.4 kB | 98.4 kB | ✓ |
app-page-tur..prod.js gzip | 99.9 kB | 99.9 kB | ✓ |
app-page-tur..prod.js gzip | 94.3 kB | 94.3 kB | ✓ |
app-page.run...dev.js gzip | 157 kB | 157 kB | ✓ |
app-page.run..prod.js gzip | 93 kB | 93 kB | ✓ |
app-route-ex...dev.js gzip | 21.4 kB | 21.5 kB | N/A |
app-route-ex..prod.js gzip | 15.2 kB | 15.2 kB | N/A |
app-route-tu..prod.js gzip | 15.2 kB | 15.2 kB | N/A |
app-route-tu..prod.js gzip | 14.9 kB | 15 kB | N/A |
app-route.ru...dev.js gzip | 21.3 kB | 21.3 kB | N/A |
app-route.ru..prod.js gzip | 14.9 kB | 15 kB | N/A |
pages-api-tu..prod.js gzip | 9.55 kB | 9.55 kB | ✓ |
pages-api.ru...dev.js gzip | 9.82 kB | 9.82 kB | ✓ |
pages-api.ru..prod.js gzip | 9.55 kB | 9.55 kB | ✓ |
pages-turbo...prod.js gzip | 21.4 kB | 21.4 kB | ✓ |
pages.runtim...dev.js gzip | 22.1 kB | 22.1 kB | ✓ |
pages.runtim..prod.js gzip | 21.4 kB | 21.4 kB | ✓ |
server.runti..prod.js gzip | 51.6 kB | 51.6 kB | ✓ |
Overall change | 859 kB | 859 kB | ✓ |
build cache Overall increase ⚠️
vercel/next.js canary | vercel/next.js wyattjohnson/unstable-cache-fetch | Change | |
---|---|---|---|
0.pack gzip | 1.61 MB | 1.62 MB | |
index.pack gzip | 112 kB | 112 kB | N/A |
Overall change | 1.61 MB | 1.62 MB |
Diff details
Diff for edge-ssr.js
Diff too large to display
Diff for 1103-HASH.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
Failing test suitesCommit: 0f3670c
Expand output● app-dir static/dynamic handling › should output HTML/RSC files for static paths
Read more about building and testing Next.js in contributing.md.
Expand output● worker-restart › should properly exhaust all restart attempts and not fail with any worker errors
Read more about building and testing Next.js in contributing.md.
Expand output● parallel-routes-and-interception › parallel routes › should gracefully handle when two page segments match the
● parallel-routes-and-interception › parallel routes › should throw a 404 when no matching parallel route is found
● parallel-routes-and-interception › parallel routes › should render nested parallel routes
● parallel-routes-and-interception › parallel routes › should support layout files in parallel routes
● parallel-routes-and-interception › parallel routes › should only scroll to the parallel route that was navigated to
● parallel-routes-and-interception › parallel routes › should apply the catch-all route to the parallel route if no matching route is found
● parallel-routes-and-interception › parallel routes › should match the catch-all routes of the more specific path, if there is more than one catch-all route
● parallel-routes-and-interception › parallel routes › should navigate with a link with prefetch=false
● parallel-routes-and-interception › parallel routes › should display all parallel route params with useParams
● parallel-routes-and-interception › parallel routes › should load CSS for a default page that exports another page
● parallel-routes-and-interception › parallel routes › should handle a loading state
● parallel-routes-and-interception › route intercepting with dynamic routes › should render intercepted route
● parallel-routes-and-interception › route intercepting with dynamic optional catch-all routes › should render intercepted route
● parallel-routes-and-interception › route intercepting with dynamic catch-all routes › should render intercepted route
● parallel-routes-and-interception › route intercepting › should render intercepted route
● parallel-routes-and-interception › route intercepting › should render an intercepted route from a slot
● parallel-routes-and-interception › route intercepting › should render an intercepted route at the top level from a nested path
● parallel-routes-and-interception › route intercepting › should render intercepted route from a nested route
● parallel-routes-and-interception › route intercepting › should re-render the layout on the server when it had a default child route
● parallel-routes-and-interception › route intercepting › should render modal when paired with parallel routes
● parallel-routes-and-interception › route intercepting › should support intercepting with beforeFiles rewrites
● parallel-routes-and-interception › route intercepting › should support intercepting local dynamic sibling routes
● parallel-routes-and-interception › route intercepting › should intercept on routes that contain hyphenated/special dynamic params
Read more about building and testing Next.js in contributing.md.
Expand output● app-dir static/dynamic handling › fetchCache config should supercede dynamic config when force-dynamic is used
● app-dir static/dynamic handling › should output HTML/RSC files for static paths
Read more about building and testing Next.js in contributing.md.
Expand output● app dir - navigation › browser back to a revalidated page › should load the page
Read more about building and testing Next.js in contributing.md. |
be30092
to
743c93c
Compare
743c93c
to
ce02b1b
Compare
} | ||
// If we aren't in a prerender, or we're in an unstable cache callback, we | ||
// don't need to postpone. | ||
if (!store.prerenderState || store.isUnstableCacheCallback) return |
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.
This is the core change, during partial prerendering, it no longer marks the route as dynamic if we're in a unstable_cache
callback.
0f3670c
to
e9103c4
Compare
e9103c4
to
f4d46f3
Compare
What?
When pages are rendered using partial prerendering (PPR), they can easily trigger cases that attempt to interrupt static rendering. If a user calls
fetch
from within aunstable_cache
callback withcache: "no-store"
, we currently break out, as that fetch operation is called within a cached callback.Why?
Without this change, using
unstable_cache
would have limited affect when dealing with external code that explicitly setscache: "no-store"
preventing it from utilizing the user-specified-cache.How?
This modifies the fetch patching so it doesn't bail static rendering due to dynamic fetches within an
unstable_cache
callback.Closes NEXT-3220