next.js
next.js copied to clipboard
seed prefetch cache with initial page
What
When navigating back to a page that you had already loaded, it currently results in a prefetch cache miss and will re-trigger any data fetching/loading despite it being available.
Why
When creating the initial router state, the prefetch cache is initialized to an empty map.
How
This passes initial flight data to the router so it can create a prefetch entry for the rendered page. I had to lift the shouldSkipComponentTree
handling a level higher so we didn't re-fetch the component tree. Although while working on this I wondered if it would make sense for walkTreeWithFlightRouterState
to be used instead of createComponentTree
, but opted against that for now since it would have required a lot more changes.
Closes NEXT-2001
This stack of pull requests is managed by Graphite. Learn more about stacking.
Join @ztanner and the rest of your teammates on Graphite
Failing test suites
Commit: 8c37ac6237192e66061ae4ae74be88b34c712ca1
pnpm test-dev test/e2e/socket-io/index.test.js
- socket-io > should support socket.io without falling back to polling
Expand output
● socket-io › should support socket.io without falling back to polling
TIMED OUT: /hello world/
undefined
636 |
637 | if (hardError) {
> 638 | throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
| ^
639 | }
640 | return false
641 | }
at check (lib/next-test-utils.ts:638:11)
at Object.<anonymous> (e2e/socket-io/index.test.js:32:7)
Read more about building and testing Next.js in contributing.md.
Stats from current PR
Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary | vercel/next.js 02-01-seed_prefetch_cache_with_initial_page | Change | |
---|---|---|---|
buildDuration | 12.1s | 12.1s | N/A |
buildDurationCached | 6.6s | 5.3s | N/A |
nodeModulesSize | 196 MB | 196 MB | ⚠️ +26.7 kB |
nextStartRea..uration (ms) | 434ms | 406ms | N/A |
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary | vercel/next.js 02-01-seed_prefetch_cache_with_initial_page | Change | |
---|---|---|---|
3f784ff6-HASH.js gzip | 53.5 kB | 53.5 kB | N/A |
423.HASH.js gzip | 185 B | 181 B | N/A |
68-HASH.js gzip | 29.9 kB | 30 kB | ⚠️ +142 B |
framework-HASH.js gzip | 45.2 kB | 45.2 kB | ✓ |
main-app-HASH.js gzip | 237 B | 239 B | N/A |
main-HASH.js gzip | 31.9 kB | 31.9 kB | N/A |
webpack-HASH.js gzip | 1.7 kB | 1.7 kB | ✓ |
Overall change | 76.8 kB | 76.9 kB | ⚠️ +142 B |
Legacy Client Bundles (polyfills)
vercel/next.js canary | vercel/next.js 02-01-seed_prefetch_cache_with_initial_page | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 31 kB | 31 kB | ✓ |
Overall change | 31 kB | 31 kB | ✓ |
Client Pages
vercel/next.js canary | vercel/next.js 02-01-seed_prefetch_cache_with_initial_page | 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.2 kB | 4.2 kB | N/A |
index-HASH.js gzip | 257 B | 256 B | N/A |
link-HASH.js gzip | 2.67 kB | 2.67 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 | vercel/next.js 02-01-seed_prefetch_cache_with_initial_page | 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 02-01-seed_prefetch_cache_with_initial_page | Change | |
---|---|---|---|
index.html gzip | 527 B | 527 B | ✓ |
link.html gzip | 541 B | 539 B | N/A |
withRouter.html gzip | 523 B | 522 B | N/A |
Overall change | 527 B | 527 B | ✓ |
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary | vercel/next.js 02-01-seed_prefetch_cache_with_initial_page | Change | |
---|---|---|---|
edge-ssr.js gzip | 94.4 kB | 94.4 kB | N/A |
page.js gzip | 150 kB | 150 kB | ⚠️ +272 B |
Overall change | 150 kB | 150 kB | ⚠️ +272 B |
Middleware size
vercel/next.js canary | vercel/next.js 02-01-seed_prefetch_cache_with_initial_page | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 621 B | 623 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 | vercel/next.js 02-01-seed_prefetch_cache_with_initial_page | Change | |
---|---|---|---|
app-page-exp...dev.js gzip | 166 kB | 166 kB | N/A |
app-page-exp..prod.js gzip | 95.4 kB | 95.5 kB | N/A |
app-page-tur..prod.js gzip | 97.2 kB | 97.2 kB | N/A |
app-page-tur..prod.js gzip | 91.6 kB | 91.7 kB | N/A |
app-page.run...dev.js gzip | 136 kB | 136 kB | N/A |
app-page.run..prod.js gzip | 90.2 kB | 90.2 kB | N/A |
app-route-ex...dev.js gzip | 22 kB | 22 kB | ✓ |
app-route-ex..prod.js gzip | 14.9 kB | 14.9 kB | ✓ |
app-route-tu..prod.js gzip | 14.9 kB | 14.9 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.1 kB | 22.1 kB | ✓ |
pages.runtim...dev.js gzip | 22.7 kB | 22.7 kB | ✓ |
pages.runtim..prod.js gzip | 22.1 kB | 22.1 kB | ✓ |
server.runti..prod.js gzip | 49.9 kB | 49.9 kB | ✓ |
Overall change | 248 kB | 248 kB | ✓ |
Diff details
Diff for page.js
Diff too large to display
Diff for 68-HASH.js
Diff too large to display
Diff for app-page-exp..ntime.dev.js
Diff too large to display
Diff for app-page-exp..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page.runtime.dev.js
Diff too large to display
Diff for app-page.runtime.prod.js
Diff too large to display