Vercel Doctor

Caching

Regler der opdager mønstre, som forhindrer effektiv caching på Vercel.

Disse regler identificerer mønstre, der omgår Vercels CDN- og ISR-caching og tvinger unødvendig server-side rendering, hvilket øger beregningsomkostningerne.

Versionsbevidst adfærd

Cachingdiagnoser tilpasser sig den registrerede Next.js-hovedversion:

  • Next.js 15: advarsler understreger, at fetch og GET-handlers ikke caches som standard.
  • Next.js 16+: advarsler prioriterer vejledning om Cache Components ("use cache", cache-tags, målrettet revalidering).
  • Andre/ukendte versioner: advarsler bruger framework-agnostisk vejledning om cachepolitikker.

nextjs-no-side-effect-in-get-handler

Error · vercel-doctor/nextjs-no-side-effect-in-get-handler

Opdager GET-route-handlere, der indeholder sideeffekter (ændring af cookies, headers eller databasekald) eller er på muterende rutesegmenter som /logout, /signout, /delete osv.

Hvorfor det er vigtigt: GET-forespørgsler kan udløses af prefetching og er sårbare over for CSRF. Sideeffekter i GET-handlere forhindrer også caching.

Bad
// app/api/logout/route.ts
export async function GET() {
  cookies().delete("session");
  return Response.json({ ok: true });
}
Good
// app/api/logout/route.ts
export async function POST() {
  cookies().delete("session");
  return Response.json({ ok: true });
}

Opdagede muterende rutesegmenter: logout, log-out, signout, sign-out, unsubscribe, delete, remove, revoke, cancel, deactivate.


vercel-no-force-dynamic

Warning · vercel-doctor/vercel-no-force-dynamic

Opdager sider med export const dynamic = "force-dynamic".

Hvorfor det er vigtigt: force-dynamic tvinger server-side rendering ved hver forespørgsel og omgår fuldstændig caching af hele sider.

Bad
export const dynamic = "force-dynamic";

export default function Page() { ... }
Good
export const revalidate = 3600;

export default function Page() { ... }

vercel-no-no-store-fetch

Warning · vercel-doctor/vercel-no-no-store-fetch

Opdager fetch-kald med cache: "no-store" eller revalidate: 0.

Hvorfor det er vigtigt: Disse indstillinger deaktiverer caching helt og øger ucachet båndbredde og beregningsomkostninger ved hver forespørgsel.

Bad
const data = await fetch(url, { cache: "no-store" });
Good
const data = await fetch(url, {
  next: { revalidate: 3600 },
});

vercel-missing-cache-policy

Warning · vercel-doctor/vercel-missing-cache-policy

Opdager GET-route-handlere uden nogen eksplicit cache-konfiguration — ingen Cache-Control-headers, ingen revalidate-eksport og ingen dynamic-eksport.

Hvorfor det er vigtigt: Uden en eksplicit cache-politik kan svar gå glip af CDN-cachingmuligheder, hvilket forårsager gentagne forespørgsler til origin-serveren.

Bad
export async function GET() {
  const data = await fetchData();
  return Response.json(data);
}
Good
export const revalidate = 3600;

export async function GET() {
  const data = await fetchData();
  return Response.json(data);
}

vercel-prefer-get-static-props

Warning · vercel-doctor/vercel-prefer-get-static-props

Opdager Pages Router-ruter, der bruger getServerSideProps.

Hvorfor det er vigtigt: getServerSideProps kører ved hver forespørgsel. Skift til getStaticProps (med valgfri ISR) cacher sider på CDN'en og reducerer serverberegning.


vercel-get-static-props-consider-isr

Warning · vercel-doctor/vercel-get-static-props-consider-isr

Opdager getStaticProps uden en revalidate-returværdi.

Hvorfor det er vigtigt: Uden revalidate bygges alle sider ved deploy-tid. For store sites forsinker dette builds markant. ISR genererer sider on-demand og cacher dem.

Good
export async function getStaticProps() {
  const data = await fetchData();
  return {
    props: { data },
    revalidate: 3600,
  };
}
Edit on GitHub

Last updated on

On this page