[Segment Cache] Add isPartial to segment prefetch #73528
Merged
acdlite merged 1 commit intovercel:canaryfrom Dec 6, 2024
Merged
[Segment Cache] Add isPartial to segment prefetch #73528acdlite merged 1 commit intovercel:canaryfrom
acdlite merged 1 commit intovercel:canaryfrom
Conversation
Member
Stats from current PRDefault Build (Increase detected
|
| vercel/next.js canary | acdlite/next.js is-partial-segment | Change | |
|---|---|---|---|
| buildDuration | 24s | 20.3s | N/A |
| buildDurationCached | 19.5s | 16.8s | N/A |
| nodeModulesSize | 409 MB | 409 MB | |
| nextStartRea..uration (ms) | 516ms | 507ms | N/A |
Client Bundles (main, webpack)
| vercel/next.js canary | acdlite/next.js is-partial-segment | Change | |
|---|---|---|---|
| 1187-HASH.js gzip | 50.1 kB | 50.1 kB | N/A |
| 8276.HASH.js gzip | 169 B | 168 B | N/A |
| 8377-HASH.js gzip | 5.3 kB | 5.3 kB | N/A |
| bccd1874-HASH.js gzip | 53 kB | 53 kB | N/A |
| framework-HASH.js gzip | 57.5 kB | 57.5 kB | N/A |
| main-app-HASH.js gzip | 233 B | 235 B | N/A |
| main-HASH.js gzip | 33.7 kB | 33.7 kB | N/A |
| webpack-HASH.js gzip | 1.71 kB | 1.71 kB | N/A |
| Overall change | 0 B | 0 B | ✓ |
Legacy Client Bundles (polyfills)
| vercel/next.js canary | acdlite/next.js is-partial-segment | Change | |
|---|---|---|---|
| polyfills-HASH.js gzip | 39.4 kB | 39.4 kB | ✓ |
| Overall change | 39.4 kB | 39.4 kB | ✓ |
Client Pages
| vercel/next.js canary | acdlite/next.js is-partial-segment | Change | |
|---|---|---|---|
| _app-HASH.js gzip | 193 B | 193 B | ✓ |
| _error-HASH.js gzip | 193 B | 193 B | ✓ |
| amp-HASH.js gzip | 513 B | 511 B | N/A |
| css-HASH.js gzip | 343 B | 342 B | N/A |
| dynamic-HASH.js gzip | 1.84 kB | 1.84 kB | N/A |
| edge-ssr-HASH.js gzip | 265 B | 265 B | ✓ |
| head-HASH.js gzip | 363 B | 362 B | N/A |
| hooks-HASH.js gzip | 393 B | 392 B | N/A |
| image-HASH.js gzip | 4.44 kB | 4.43 kB | N/A |
| index-HASH.js gzip | 268 B | 268 B | ✓ |
| link-HASH.js gzip | 2.35 kB | 2.34 kB | N/A |
| routerDirect..HASH.js gzip | 328 B | 328 B | ✓ |
| script-HASH.js gzip | 397 B | 397 B | ✓ |
| withRouter-HASH.js gzip | 323 B | 326 B | N/A |
| 1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
| Overall change | 1.75 kB | 1.75 kB | ✓ |
Client Build Manifests
| vercel/next.js canary | acdlite/next.js is-partial-segment | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 746 B | 747 B | N/A |
| Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
| vercel/next.js canary | acdlite/next.js is-partial-segment | Change | |
|---|---|---|---|
| index.html gzip | 523 B | 524 B | N/A |
| link.html gzip | 537 B | 537 B | ✓ |
| withRouter.html gzip | 519 B | 521 B | N/A |
| Overall change | 537 B | 537 B | ✓ |
Edge SSR bundle Size
| vercel/next.js canary | acdlite/next.js is-partial-segment | Change | |
|---|---|---|---|
| edge-ssr.js gzip | 128 kB | 128 kB | N/A |
| page.js gzip | 202 kB | 202 kB | N/A |
| Overall change | 0 B | 0 B | ✓ |
Middleware size
| vercel/next.js canary | acdlite/next.js is-partial-segment | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 666 B | 664 B | N/A |
| middleware-r..fest.js gzip | 155 B | 156 B | N/A |
| middleware.js gzip | 31.1 kB | 31.1 kB | N/A |
| edge-runtime..pack.js gzip | 844 B | 844 B | ✓ |
| Overall change | 844 B | 844 B | ✓ |
Next Runtimes
| vercel/next.js canary | acdlite/next.js is-partial-segment | Change | |
|---|---|---|---|
| 797-experime...dev.js gzip | 322 B | 322 B | ✓ |
| 797.runtime.dev.js gzip | 314 B | 314 B | ✓ |
| app-page-exp...dev.js gzip | 322 kB | 322 kB | N/A |
| app-page-exp..prod.js gzip | 126 kB | 127 kB | N/A |
| app-page-tur..prod.js gzip | 139 kB | 139 kB | N/A |
| app-page-tur..prod.js gzip | 135 kB | 135 kB | N/A |
| app-page.run...dev.js gzip | 312 kB | 312 kB | N/A |
| app-page.run..prod.js gzip | 122 kB | 122 kB | N/A |
| app-route-ex...dev.js gzip | 36.8 kB | 36.8 kB | ✓ |
| app-route-ex..prod.js gzip | 25 kB | 25 kB | ✓ |
| app-route-tu..prod.js gzip | 25 kB | 25 kB | ✓ |
| app-route-tu..prod.js gzip | 24.8 kB | 24.8 kB | ✓ |
| app-route.ru...dev.js gzip | 38.5 kB | 38.5 kB | ✓ |
| app-route.ru..prod.js gzip | 24.8 kB | 24.8 kB | ✓ |
| pages-api-tu..prod.js gzip | 9.56 kB | 9.56 kB | ✓ |
| pages-api.ru...dev.js gzip | 11.4 kB | 11.4 kB | ✓ |
| pages-api.ru..prod.js gzip | 9.56 kB | 9.56 kB | ✓ |
| pages-turbo...prod.js gzip | 21.3 kB | 21.3 kB | ✓ |
| pages.runtim...dev.js gzip | 27 kB | 27 kB | ✓ |
| pages.runtim..prod.js gzip | 21.3 kB | 21.3 kB | ✓ |
| server.runti..prod.js gzip | 916 kB | 916 kB | ✓ |
| Overall change | 1.19 MB | 1.19 MB | ✓ |
build cache Overall increase ⚠️
| vercel/next.js canary | acdlite/next.js is-partial-segment | Change | |
|---|---|---|---|
| 0.pack gzip | 2.04 MB | 2.04 MB | |
| index.pack gzip | 145 kB | 146 kB | |
| Overall change | 2.18 MB | 2.19 MB |
Diff details
Diff for 1187-HASH.js
Diff too large to display
Diff for main-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
| next.prev = prev | ||
| } | ||
| } else { | ||
| // Already deleted |
There was a problem hiding this comment.
I believe this else block at the end is redundant and can be removed since it doesn't perform any operations. Will this be more concise?
if (next !== null && prev !== null) {
lruSize -= deleted.size;
deleted.next = null;
deleted.prev = null;
// Remove from the list
if (head === deleted) {
// Update the head
head = next === head ? null : next;
} else {
prev.next = next;
next.prev = prev;
}
}
There was a problem hiding this comment.
@acdlite let me know what you think.
Contributor
Author
There was a problem hiding this comment.
It's just there for the comment. It gets stripped out by the minifier.
ztanner
reviewed
Dec 5, 2024
ztanner
approved these changes
Dec 5, 2024
0153d75 to
e531497
Compare
Member
Tests Passed |
During a navigation, we should be able to skip the dynamic request if the prefetched data does not contain any dynamic holes. In the previous cache implementation, we only tracked this per route; in the Segment Cache, we must track this per segment. This updates the SegmentCacheEntry and CacheNodeSeedData types to include an `isPartial` field. The field is always false during a dynamic render, or when PPR is disabled. No behavior changes are included in this PR.
e531497 to
75f0518
Compare
acdlite
added a commit
that referenced
this pull request
Dec 6, 2024
devjiwonchoi
pushed a commit
that referenced
this pull request
Dec 9, 2024
Based on - #73434 - #73486 --- During a navigation, we should be able to skip the dynamic request if the prefetched data does not contain any dynamic holes. In the previous cache implementation, we only tracked this per route; in the Segment Cache, we must track this per segment. This updates the SegmentCacheEntry and CacheNodeSeedData types to include an `isPartial` field. The field is always false during a dynamic render, or when PPR is disabled. This PR does not change any behavior; it only adds the new field.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Based on
During a navigation, we should be able to skip the dynamic request if the prefetched data does not contain any dynamic holes. In the previous cache implementation, we only tracked this per route; in the Segment Cache, we must track this per segment.
This updates the SegmentCacheEntry and CacheNodeSeedData types to include an
isPartialfield. The field is always false during a dynamic render, or when PPR is disabled.This PR does not change any behavior; it only adds the new field.