fix(nuxt): use prerender cache for islands (#19822)

This commit is contained in:
Daniel Roe 2023-03-22 17:12:01 +00:00 committed by GitHub
parent 9d8c230132
commit e6c1bb57d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -159,6 +159,7 @@ async function getIslandContext (event: H3Event): Promise<NuxtIslandContext> {
} }
const PAYLOAD_CACHE = (process.env.NUXT_PAYLOAD_EXTRACTION && process.env.prerender) ? new Map() : null // TODO: Use LRU cache const PAYLOAD_CACHE = (process.env.NUXT_PAYLOAD_EXTRACTION && process.env.prerender) ? new Map() : null // TODO: Use LRU cache
const ISLAND_CACHE = (process.env.NUXT_COMPONENT_ISLANDS && process.env.prerender) ? new Map() : null // TODO: Use LRU cache
const PAYLOAD_URL_RE = /\/_payload(\.[a-zA-Z0-9]+)?.js(\?.*)?$/ const PAYLOAD_URL_RE = /\/_payload(\.[a-zA-Z0-9]+)?.js(\?.*)?$/
const ROOT_NODE_REGEX = new RegExp(`^<${appRootTag} id="${appRootId}">([\\s\\S]*)</${appRootTag}>$`) const ROOT_NODE_REGEX = new RegExp(`^<${appRootTag} id="${appRootId}">([\\s\\S]*)</${appRootTag}>$`)
@ -185,6 +186,10 @@ export default defineRenderHandler(async (event) => {
? await getIslandContext(event) ? await getIslandContext(event)
: undefined : undefined
if (process.env.prerender && islandContext && ISLAND_CACHE!.has(event.node.req.url)) {
return ISLAND_CACHE!.get(event.node.req.url)
}
// Request url // Request url
let url = ssrError?.url as string || islandContext?.url || event.node.req.url! let url = ssrError?.url as string || islandContext?.url || event.node.req.url!
@ -334,6 +339,9 @@ export default defineRenderHandler(async (event) => {
'x-powered-by': 'Nuxt' 'x-powered-by': 'Nuxt'
} }
} }
if (process.env.prerender) {
ISLAND_CACHE!.set(`/__nuxt_island/${islandContext!.name}:${islandContext!.id}`, response)
}
return response return response
} }