Skip to content

Commit 7401cce

Browse files
committed
remove dev warmup codepaths
1 parent c294549 commit 7401cce

File tree

5 files changed

+4
-181
lines changed

5 files changed

+4
-181
lines changed

packages/next/src/build/templates/app-page.ts

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -402,26 +402,6 @@ export async function handler(
402402
const nextReq = new NodeNextRequest(req)
403403
const nextRes = new NodeNextResponse(res)
404404

405-
// TODO: adapt for putting the RDC inside the postponed data
406-
// If we're in dev, and this isn't a prefetch or a server action,
407-
// we should seed the resume data cache.
408-
if (process.env.NODE_ENV === 'development') {
409-
if (
410-
nextConfig.experimental.cacheComponents &&
411-
!isPrefetchRSCRequest &&
412-
!context.renderOpts.isPossibleServerAction
413-
) {
414-
const warmup = await routeModule.warmup(nextReq, nextRes, context)
415-
416-
// If the warmup is successful, we should use the resume data
417-
// cache from the warmup.
418-
if (warmup.metadata.renderResumeDataCache) {
419-
context.renderOpts.renderResumeDataCache =
420-
warmup.metadata.renderResumeDataCache
421-
}
422-
}
423-
}
424-
425405
return routeModule.render(nextReq, nextRes, context).finally(() => {
426406
if (!span) return
427407

packages/next/src/export/routes/app-page.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ export async function exportAppPage(
8484
fallbackRouteParams,
8585
renderOpts,
8686
undefined,
87-
false,
8887
sharedContext
8988
)
9089

packages/next/src/server/app-render/app-render.tsx

Lines changed: 4 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,6 @@ export type AppRenderContext = {
256256
}
257257

258258
interface ParseRequestHeadersOptions {
259-
readonly isDevWarmup: undefined | boolean
260259
readonly isRoutePPREnabled: boolean
261260
readonly previewModeId: string | undefined
262261
}
@@ -282,7 +281,6 @@ interface ParsedRequestHeaders {
282281
readonly isPrefetchRequest: boolean
283282
readonly isRuntimePrefetchRequest: boolean
284283
readonly isRouteTreePrefetchRequest: boolean
285-
readonly isDevWarmupRequest: boolean
286284
readonly isHmrRefresh: boolean
287285
readonly isRSCRequest: boolean
288286
readonly nonce: string | undefined
@@ -295,20 +293,17 @@ function parseRequestHeaders(
295293
headers: IncomingHttpHeaders,
296294
options: ParseRequestHeadersOptions
297295
): ParsedRequestHeaders {
298-
const isDevWarmupRequest = options.isDevWarmup === true
299-
300296
// dev warmup requests are treated as prefetch RSC requests
301297
// runtime prefetch requests are *not* treated as prefetch requests
302298
// (TODO: this is confusing, we should refactor this to express this better)
303-
const isPrefetchRequest =
304-
isDevWarmupRequest || headers[NEXT_ROUTER_PREFETCH_HEADER] === '1'
299+
const isPrefetchRequest = headers[NEXT_ROUTER_PREFETCH_HEADER] === '1'
305300

306301
const isRuntimePrefetchRequest = headers[NEXT_ROUTER_PREFETCH_HEADER] === '2'
307302

308303
const isHmrRefresh = headers[NEXT_HMR_REFRESH_HEADER] !== undefined
309304

310305
// dev warmup requests are treated as prefetch RSC requests
311-
const isRSCRequest = isDevWarmupRequest || headers[RSC_HEADER] !== undefined
306+
const isRSCRequest = headers[RSC_HEADER] !== undefined
312307

313308
const shouldProvideFlightRouterState =
314309
isRSCRequest && (!isPrefetchRequest || !options.isRoutePPREnabled)
@@ -360,7 +355,6 @@ function parseRequestHeaders(
360355
isRouteTreePrefetchRequest,
361356
isHmrRefresh,
362357
isRSCRequest,
363-
isDevWarmupRequest,
364358
nonce,
365359
previouslyRevalidatedTags,
366360
requestId,
@@ -969,129 +963,6 @@ async function finalRuntimeServerPrerender(
969963
}
970964
}
971965

972-
/**
973-
* Performs a "warmup" render of the RSC payload for a given route. This function is called by the server
974-
* prior to an actual render request in Dev mode only. It's purpose is to fill caches so the actual render
975-
* can accurately log activity in the right render context (Prerender vs Render).
976-
*
977-
* At the moment this implementation is mostly a fork of generateDynamicFlightRenderResult
978-
*/
979-
async function warmupDevRender(
980-
req: BaseNextRequest,
981-
ctx: AppRenderContext
982-
): Promise<RenderResult> {
983-
const {
984-
clientReferenceManifest,
985-
componentMod: ComponentMod,
986-
getDynamicParamFromSegment,
987-
implicitTags,
988-
renderOpts,
989-
workStore,
990-
} = ctx
991-
992-
const {
993-
allowEmptyStaticShell = false,
994-
dev,
995-
onInstrumentationRequestError,
996-
} = renderOpts
997-
998-
if (!dev) {
999-
throw new InvariantError(
1000-
'generateDynamicFlightRenderResult should never be called in `next start` mode.'
1001-
)
1002-
}
1003-
1004-
const rootParams = getRootParams(
1005-
ComponentMod.routeModule.userland.loaderTree,
1006-
getDynamicParamFromSegment
1007-
)
1008-
1009-
function onFlightDataRenderError(err: DigestedError) {
1010-
return onInstrumentationRequestError?.(
1011-
err,
1012-
req,
1013-
createErrorContext(ctx, 'react-server-components-payload')
1014-
)
1015-
}
1016-
const onError = createFlightReactServerErrorHandler(
1017-
true,
1018-
onFlightDataRenderError
1019-
)
1020-
1021-
// We're doing a dev warmup, so we should create a new resume data cache so
1022-
// we can fill it.
1023-
const prerenderResumeDataCache = createPrerenderResumeDataCache()
1024-
1025-
const renderController = new AbortController()
1026-
const prerenderController = new AbortController()
1027-
const reactController = new AbortController()
1028-
const cacheSignal = new CacheSignal()
1029-
1030-
const prerenderStore: PrerenderStore = {
1031-
type: 'prerender',
1032-
phase: 'render',
1033-
rootParams,
1034-
implicitTags,
1035-
renderSignal: renderController.signal,
1036-
controller: prerenderController,
1037-
cacheSignal,
1038-
dynamicTracking: null,
1039-
allowEmptyStaticShell,
1040-
revalidate: INFINITE_CACHE,
1041-
expire: INFINITE_CACHE,
1042-
stale: INFINITE_CACHE,
1043-
tags: [],
1044-
prerenderResumeDataCache,
1045-
renderResumeDataCache: null,
1046-
hmrRefreshHash: req.cookies[NEXT_HMR_REFRESH_HASH_COOKIE],
1047-
captureOwnerStack: ComponentMod.captureOwnerStack,
1048-
// warmup is a dev only feature and no fallback params are used in the
1049-
// primary render which is static. We only use a prerender store here to
1050-
// allow the warmup to halt on Request data APIs and fetches.
1051-
fallbackRouteParams: null,
1052-
}
1053-
1054-
const rscPayload = await workUnitAsyncStorage.run(
1055-
prerenderStore,
1056-
generateDynamicRSCPayload,
1057-
ctx
1058-
)
1059-
1060-
// For app dir, use the bundled version of Flight server renderer (renderToReadableStream)
1061-
// which contains the subset React.
1062-
workUnitAsyncStorage.run(
1063-
prerenderStore,
1064-
ComponentMod.renderToReadableStream,
1065-
rscPayload,
1066-
clientReferenceManifest.clientModules,
1067-
{
1068-
filterStackFrame,
1069-
onError,
1070-
signal: renderController.signal,
1071-
}
1072-
)
1073-
1074-
// Wait for all caches to be finished filling and for async imports to resolve
1075-
trackPendingModules(cacheSignal)
1076-
await cacheSignal.cacheReady()
1077-
1078-
// We unset the cache so any late over-run renders aren't able to write into this cache
1079-
prerenderStore.prerenderResumeDataCache = null
1080-
// Abort the render
1081-
reactController.abort()
1082-
renderController.abort()
1083-
1084-
// We don't really want to return a result here but the stack of functions
1085-
// that calls into renderToHTML... expects a result. We should refactor this to
1086-
// lift the warmup pathway outside of renderToHTML... but for now this suffices
1087-
return new FlightRenderResult('', {
1088-
fetchMetrics: workStore.fetchMetrics,
1089-
renderResumeDataCache: createRenderResumeDataCache(
1090-
prerenderResumeDataCache
1091-
),
1092-
})
1093-
}
1094-
1095966
/**
1096967
* Crawlers will inadvertently think the canonicalUrl in the RSC payload should be crawled
1097968
* when our intention is to just seed the router state with the current URL.
@@ -1656,7 +1527,6 @@ async function renderToHTMLOrFlightImpl(
16561527
isPrefetchRequest,
16571528
isRuntimePrefetchRequest,
16581529
isRSCRequest,
1659-
isDevWarmupRequest,
16601530
isHmrRefresh,
16611531
nonce,
16621532
} = parsedRequestHeaders
@@ -1847,8 +1717,7 @@ async function renderToHTMLOrFlightImpl(
18471717
// The type check here ensures that `req` is correctly typed, and the
18481718
// environment variable check provides dead code elimination.
18491719
process.env.NEXT_RUNTIME !== 'edge' &&
1850-
isNodeNextRequest(req) &&
1851-
!isDevWarmupRequest
1720+
isNodeNextRequest(req)
18521721
) {
18531722
const setIsrStatus = renderOpts.setIsrStatus
18541723
req.originalRequest.on('end', () => {
@@ -1860,9 +1729,7 @@ async function renderToHTMLOrFlightImpl(
18601729
})
18611730
}
18621731

1863-
if (isDevWarmupRequest) {
1864-
return warmupDevRender(req, ctx)
1865-
} else if (isRSCRequest) {
1732+
if (isRSCRequest) {
18661733
if (isRuntimePrefetchRequest) {
18671734
return generateRuntimePrefetchResult(req, res, ctx, requestStore)
18681735
} else {
@@ -1991,7 +1858,6 @@ export type AppPageRender = (
19911858
fallbackRouteParams: OpaqueFallbackRouteParams | null,
19921859
renderOpts: RenderOpts,
19931860
serverComponentsHmrCache: ServerComponentsHmrCache | undefined,
1994-
isDevWarmup: boolean,
19951861
sharedContext: AppSharedContext
19961862
) => Promise<RenderResult<AppPageRenderResultMetadata>>
19971863

@@ -2003,7 +1869,6 @@ export const renderToHTMLOrFlight: AppPageRender = (
20031869
fallbackRouteParams,
20041870
renderOpts,
20051871
serverComponentsHmrCache,
2006-
isDevWarmup,
20071872
sharedContext
20081873
) => {
20091874
if (!req.url) {
@@ -2015,7 +1880,6 @@ export const renderToHTMLOrFlight: AppPageRender = (
20151880
// We read these values from the request object as, in certain cases,
20161881
// base-server will strip them to opt into different rendering behavior.
20171882
const parsedRequestHeaders = parseRequestHeaders(req.headers, {
2018-
isDevWarmup,
20191883
isRoutePPREnabled: renderOpts.experimental.isRoutePPREnabled === true,
20201884
previewModeId: renderOpts.previewProps?.previewModeId,
20211885
})

packages/next/src/server/next-server.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,6 @@ export default class NextNodeServer extends BaseServer<
708708
null,
709709
renderOpts,
710710
this.getServerComponentsHmrCache(),
711-
false,
712711
{
713712
buildId: this.buildId,
714713
}

packages/next/src/server/route-modules/app-page/module.ts

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -114,25 +114,6 @@ export class AppPageRouteModule extends RouteModule<
114114
context.fallbackRouteParams,
115115
context.renderOpts,
116116
context.serverComponentsHmrCache,
117-
false,
118-
context.sharedContext
119-
)
120-
}
121-
122-
public warmup(
123-
req: BaseNextRequest,
124-
res: BaseNextResponse,
125-
context: AppPageRouteHandlerContext
126-
): Promise<RenderResult> {
127-
return renderToHTMLOrFlight(
128-
req,
129-
res,
130-
context.page,
131-
context.query,
132-
context.fallbackRouteParams,
133-
context.renderOpts,
134-
context.serverComponentsHmrCache,
135-
true,
136117
context.sharedContext
137118
)
138119
}

0 commit comments

Comments
 (0)