Skip to content

Commit 3f99047

Browse files
committed
remove dev warmup codepaths
1 parent 9f98bf7 commit 3f99047

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
@@ -294,20 +292,17 @@ function parseRequestHeaders(
294292
headers: IncomingHttpHeaders,
295293
options: ParseRequestHeadersOptions
296294
): ParsedRequestHeaders {
297-
const isDevWarmupRequest = options.isDevWarmup === true
298-
299295
// dev warmup requests are treated as prefetch RSC requests
300296
// runtime prefetch requests are *not* treated as prefetch requests
301297
// (TODO: this is confusing, we should refactor this to express this better)
302-
const isPrefetchRequest =
303-
isDevWarmupRequest || headers[NEXT_ROUTER_PREFETCH_HEADER] === '1'
298+
const isPrefetchRequest = headers[NEXT_ROUTER_PREFETCH_HEADER] === '1'
304299

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

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

309304
// dev warmup requests are treated as prefetch RSC requests
310-
const isRSCRequest = isDevWarmupRequest || headers[RSC_HEADER] !== undefined
305+
const isRSCRequest = headers[RSC_HEADER] !== undefined
311306

312307
const shouldProvideFlightRouterState =
313308
isRSCRequest && (!isPrefetchRequest || !options.isRoutePPREnabled)
@@ -344,7 +339,6 @@ function parseRequestHeaders(
344339
isRouteTreePrefetchRequest,
345340
isHmrRefresh,
346341
isRSCRequest,
347-
isDevWarmupRequest,
348342
nonce,
349343
previouslyRevalidatedTags,
350344
htmlRequestId,
@@ -966,129 +960,6 @@ async function finalRuntimeServerPrerender(
966960
}
967961
}
968962

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

1870-
if (isDevWarmupRequest) {
1871-
return warmupDevRender(req, ctx)
1872-
} else if (isRSCRequest) {
1739+
if (isRSCRequest) {
18731740
if (isRuntimePrefetchRequest) {
18741741
return generateRuntimePrefetchResult(req, res, ctx, requestStore)
18751742
} else {
@@ -1998,7 +1865,6 @@ export type AppPageRender = (
19981865
fallbackRouteParams: OpaqueFallbackRouteParams | null,
19991866
renderOpts: RenderOpts,
20001867
serverComponentsHmrCache: ServerComponentsHmrCache | undefined,
2001-
isDevWarmup: boolean,
20021868
sharedContext: AppSharedContext
20031869
) => Promise<RenderResult<AppPageRenderResultMetadata>>
20041870

@@ -2010,7 +1876,6 @@ export const renderToHTMLOrFlight: AppPageRender = (
20101876
fallbackRouteParams,
20111877
renderOpts,
20121878
serverComponentsHmrCache,
2013-
isDevWarmup,
20141879
sharedContext
20151880
) => {
20161881
if (!req.url) {
@@ -2022,7 +1887,6 @@ export const renderToHTMLOrFlight: AppPageRender = (
20221887
// We read these values from the request object as, in certain cases,
20231888
// base-server will strip them to opt into different rendering behavior.
20241889
const parsedRequestHeaders = parseRequestHeaders(req.headers, {
2025-
isDevWarmup,
20261890
isRoutePPREnabled: renderOpts.experimental.isRoutePPREnabled === true,
20271891
previewModeId: renderOpts.previewProps?.previewModeId,
20281892
})

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
@@ -106,25 +106,6 @@ export class AppPageRouteModule extends RouteModule<
106106
context.fallbackRouteParams,
107107
context.renderOpts,
108108
context.serverComponentsHmrCache,
109-
false,
110-
context.sharedContext
111-
)
112-
}
113-
114-
public warmup(
115-
req: BaseNextRequest,
116-
res: BaseNextResponse,
117-
context: AppPageRouteHandlerContext
118-
): Promise<RenderResult> {
119-
return renderToHTMLOrFlight(
120-
req,
121-
res,
122-
context.page,
123-
context.query,
124-
context.fallbackRouteParams,
125-
context.renderOpts,
126-
context.serverComponentsHmrCache,
127-
true,
128109
context.sharedContext
129110
)
130111
}

0 commit comments

Comments
 (0)