-
Notifications
You must be signed in to change notification settings - Fork 27.8k
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
[Segment Cache] Evict client cache on revalidate #74874
[Segment Cache] Evict client cache on revalidate #74874
Conversation
Tests Passed |
// but it should not affect the timing of when requests reach the | ||
// server; we pass the request to the server the immediately. | ||
result: new Promise(async (resolve) => { | ||
const originalResponse = await page.request.fetch(request) |
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.
The change in this file is to move when the intercepted request gets forwarded to the server — immediately, instead of at the end of the act
scope. That way the test can observe/handle the request within the act
scope, like I do here:
next.js/test/e2e/app-dir/segment-cache/revalidation/segment-cache-revalidation.test.ts
Lines 86 to 101 in 9e58505
await act( | |
async () => { | |
// Reveal the link | |
await linkVisibilityToggle.click() | |
// Because the corresponding entry was evicted from the cache, this | |
// should trigger a new prefetch. | |
await TestLog.waitFor(['REQUEST: random-greeting']) | |
// Fulfill the prefetch request. | |
await pendingRequests.get('random-greeting').resolve('yo!') | |
}, | |
{ | |
includes: 'yo!', | |
} | |
) |
It does not affect the timing of when the response reaches the client — that still always happens at the end.
9e58505
to
c92a060
Compare
Stats from current PRDefault Build (Increase detected
|
vercel/next.js canary | acdlite/next.js segment-cache-evict-on-revalidate | Change | |
---|---|---|---|
buildDuration | 18s | 15.5s | N/A |
buildDurationCached | 14.7s | 12.3s | N/A |
nodeModulesSize | 418 MB | 418 MB | |
nextStartRea..uration (ms) | 398ms | 401ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | acdlite/next.js segment-cache-evict-on-revalidate | Change | |
---|---|---|---|
5306-HASH.js gzip | 53.9 kB | 54 kB | N/A |
8276.HASH.js gzip | 169 B | 168 B | N/A |
8377-HASH.js gzip | 5.44 kB | 5.44 kB | N/A |
bccd1874-HASH.js gzip | 52.9 kB | 52.9 kB | N/A |
framework-HASH.js gzip | 57.5 kB | 57.5 kB | N/A |
main-app-HASH.js gzip | 239 B | 242 B | N/A |
main-HASH.js gzip | 34.2 kB | 34.2 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 segment-cache-evict-on-revalidate | 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 segment-cache-evict-on-revalidate | Change | |
---|---|---|---|
_app-HASH.js gzip | 193 B | 193 B | ✓ |
_error-HASH.js gzip | 193 B | 193 B | ✓ |
amp-HASH.js gzip | 512 B | 510 B | N/A |
css-HASH.js gzip | 343 B | 342 B | N/A |
dynamic-HASH.js gzip | 1.84 kB | 1.84 kB | ✓ |
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.57 kB | 4.57 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 | 3.59 kB | 3.59 kB | ✓ |
Client Build Manifests
vercel/next.js canary | acdlite/next.js segment-cache-evict-on-revalidate | Change | |
---|---|---|---|
_buildManifest.js gzip | 749 B | 747 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | acdlite/next.js segment-cache-evict-on-revalidate | Change | |
---|---|---|---|
index.html gzip | 524 B | 523 B | N/A |
link.html gzip | 539 B | 538 B | N/A |
withRouter.html gzip | 520 B | 520 B | ✓ |
Overall change | 520 B | 520 B | ✓ |
Edge SSR bundle Size
vercel/next.js canary | acdlite/next.js segment-cache-evict-on-revalidate | Change | |
---|---|---|---|
edge-ssr.js gzip | 129 kB | 129 kB | N/A |
page.js gzip | 208 kB | 208 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | acdlite/next.js segment-cache-evict-on-revalidate | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 670 B | 666 B | N/A |
middleware-r..fest.js gzip | 155 B | 156 B | N/A |
middleware.js gzip | 31.3 kB | 31.3 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 segment-cache-evict-on-revalidate | Change | |
---|---|---|---|
274-experime...dev.js gzip | 322 B | 322 B | ✓ |
274.runtime.dev.js gzip | 314 B | 314 B | ✓ |
app-page-exp...dev.js gzip | 374 kB | 374 kB | N/A |
app-page-exp..prod.js gzip | 130 kB | 130 kB | ✓ |
app-page-tur..prod.js gzip | 143 kB | 143 kB | ✓ |
app-page-tur..prod.js gzip | 139 kB | 139 kB | ✓ |
app-page.run...dev.js gzip | 362 kB | 362 kB | N/A |
app-page.run..prod.js gzip | 126 kB | 126 kB | ✓ |
app-route-ex...dev.js gzip | 37.6 kB | 37.6 kB | ✓ |
app-route-ex..prod.js gzip | 25.6 kB | 25.6 kB | ✓ |
app-route-tu..prod.js gzip | 25.6 kB | 25.6 kB | ✓ |
app-route-tu..prod.js gzip | 25.4 kB | 25.4 kB | ✓ |
app-route.ru...dev.js gzip | 39.2 kB | 39.2 kB | ✓ |
app-route.ru..prod.js gzip | 25.4 kB | 25.4 kB | ✓ |
pages-api-tu..prod.js gzip | 9.69 kB | 9.69 kB | ✓ |
pages-api.ru...dev.js gzip | 11.6 kB | 11.6 kB | ✓ |
pages-api.ru..prod.js gzip | 9.68 kB | 9.68 kB | ✓ |
pages-turbo...prod.js gzip | 21.7 kB | 21.7 kB | ✓ |
pages.runtim...dev.js gzip | 27.5 kB | 27.5 kB | ✓ |
pages.runtim..prod.js gzip | 21.7 kB | 21.7 kB | ✓ |
server.runti..prod.js gzip | 916 kB | 916 kB | ✓ |
Overall change | 1.73 MB | 1.73 MB | ✓ |
build cache Overall increase ⚠️
vercel/next.js canary | acdlite/next.js segment-cache-evict-on-revalidate | Change | |
---|---|---|---|
0.pack gzip | 2.09 MB | 2.09 MB | |
index.pack gzip | 75.5 kB | 74.9 kB | N/A |
Overall change | 2.09 MB | 2.09 MB |
Diff details
Diff for 5306-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.runtime.dev.js
Diff too large to display
c92a060
to
921dbf0
Compare
This implements evicting the client cache when a Server Action calls revalidatePath or revalidateTag. Similar to the old prefetching implementation, it works by clearing the entire client cache, as opposed to only the affected path or tags. There are more changes needed on the server before we can support granular cache eviction. This just gets us to parity with the status quo.
921dbf0
to
e2146e8
Compare
This implements evicting the client cache when a Server Action calls revalidatePath or revalidateTag.
Similar to the old prefetching implementation, it works by clearing the entire client cache, as opposed to only the affected path or tags. There are more changes needed on the server before we can support granular cache eviction. This just gets us to parity with the status quo.