mirror of
https://github.com/hanzoai/next.js.git
synced 2026-09-24 17:00:51 +00:00
Removes the "allow-runtime" prefetch config, and turns its behavior on implicitly wherever Partial Prefetching is enabled. The original motivation for "allow-runtime" was to give apps more control over server costs triggered by prefetches. Until a route explicitly opts in, prefetches would only be served from the CDN, not from the server. The problem, though, was it was very confusing to know when to add or remove this configuration. The incentive for many apps was to add it everywhere, with no clear signal for when to remove it. Our updated thinking is that Partial Prefetching itself already provides sufficient protection against runaway prefetching costs: per-link prefetches only happen on Link components that explicitly opt in with the prefetch prop. The optimizations landed earlier in this stack also make allow-runtime less necessary: on pages where all the content is statically renderable, prefetches are served from the static cache and no runtime request is ever issued; only a page that accesses non-static data is prefetched at runtime. The upshot of this decision is that runtime versus static becomes an internal optimization; the same content gets prefetched regardless of whether or how Next.js is able to optimize it.
24 lines
1.1 KiB
TypeScript
24 lines
1.1 KiB
TypeScript
// The Speculative-phase counterpart of app/fully-static/page.tsx: a page
|
|
// that accesses no runtime data at all, on a Partial Prefetching route.
|
|
// Partial Prefetching segments require runtime-completeness in every phase,
|
|
// and the Speculative phase only processes this segment when a link opts in
|
|
// (the consuming test uses `prefetch={true}`; non-eager routes are otherwise
|
|
// shell-only by design).
|
|
//
|
|
// Every prerender of this route is clean, so the route tree prefetch always
|
|
// carries the static-prefetch hint: the Speculative phase attempts a static
|
|
// prefetch of this segment instead of going straight to a runtime one. The
|
|
// static responses are always complete (a runtime request would return
|
|
// nothing more), so the attempt is sufficient and no runtime request fires
|
|
// at all. (Note this relies on the server emitting static data for Partial
|
|
// Prefetching segments, which it does unconditionally.)
|
|
export const prefetch = 'partial'
|
|
|
|
export default function Page() {
|
|
return (
|
|
<main>
|
|
<p id="page-content">Speculative-static page content</p>
|
|
</main>
|
|
)
|
|
}
|