diff --git a/packages/next/src/server/base-server.ts b/packages/next/src/server/base-server.ts index a5d2d9b10ed00..a5aef7f400f02 100644 --- a/packages/next/src/server/base-server.ts +++ b/packages/next/src/server/base-server.ts @@ -1271,6 +1271,7 @@ export default abstract class Server { | 'http' | 'https', }) + incrementalCache.resetRequestCache() addRequestMeta(req, 'incrementalCache', incrementalCache) ;(globalThis as any).__incrementalCache = incrementalCache } @@ -2141,6 +2142,8 @@ export default abstract class Server { | 'https', })) + incrementalCache?.resetRequestCache() + const { routeModule } = components type Renderer = (context: { diff --git a/packages/next/src/server/lib/incremental-cache/fetch-cache.ts b/packages/next/src/server/lib/incremental-cache/fetch-cache.ts index d0d757faf405f..d14aaa0f3ccc5 100644 --- a/packages/next/src/server/lib/incremental-cache/fetch-cache.ts +++ b/packages/next/src/server/lib/incremental-cache/fetch-cache.ts @@ -106,6 +106,10 @@ export default class FetchCache implements CacheHandler { } } + public resetRequestCache(): void { + memoryCache?.reset() + } + public async revalidateTag(tag: string) { if (this.debug) { console.log('revalidateTag', tag) @@ -157,14 +161,11 @@ export default class FetchCache implements CacheHandler { return null } + // memory cache is cleared at the end of each request + // so that revalidate events are pulled from upstream + // on successive requests let data = memoryCache?.get(key) - // memory cache data is only leveraged for up to 2 seconds - // so that revalidation events can be pulled from source - if (Date.now() - (data?.lastModified || 0) > 2000) { - data = undefined - } - // get data from fetch cache if (!data && this.cacheEndpoint) { try { diff --git a/packages/next/src/server/lib/incremental-cache/file-system-cache.ts b/packages/next/src/server/lib/incremental-cache/file-system-cache.ts index dc4709bb4f364..9098413e0a8a3 100644 --- a/packages/next/src/server/lib/incremental-cache/file-system-cache.ts +++ b/packages/next/src/server/lib/incremental-cache/file-system-cache.ts @@ -91,6 +91,8 @@ export default class FileSystemCache implements CacheHandler { } } + public resetRequestCache(): void {} + private loadTagsManifest() { if (!this.tagsManifestPath || !this.fs || tagsManifest) return try { diff --git a/packages/next/src/server/lib/incremental-cache/index.ts b/packages/next/src/server/lib/incremental-cache/index.ts index 8ac3093d96259..b26e9287dbf7a 100644 --- a/packages/next/src/server/lib/incremental-cache/index.ts +++ b/packages/next/src/server/lib/incremental-cache/index.ts @@ -60,6 +60,8 @@ export class CacheHandler { ): Promise {} public async revalidateTag(_tag: string): Promise {} + + public resetRequestCache(): void {} } export class IncrementalCache implements IncrementalCacheType { @@ -213,6 +215,10 @@ export class IncrementalCache implements IncrementalCacheType { return fetchCache ? pathname : normalizePagePath(pathname) } + resetRequestCache() { + this.cacheHandler?.resetRequestCache?.() + } + async unlock(cacheKey: string) { const unlock = this.unlocks.get(cacheKey) if (unlock) {