BOVO Digital

Transform your ideas into reality

BOVO Digital
Web Development10 min read

Partial Pre-Rendering (PPR) in Next.js: The Complete Guide

PPR combines the best of static and dynamic rendering. With the use cache directive, Next.js revolutionizes web rendering. Technical guide with examples.

William Aklamavo

William Aklamavo

February 25, 2026

Partial Pre-Rendering (PPR) in Next.js: The Complete Guide

Partial Pre-Rendering (PPR) in Next.js: The Complete Guide

Partial Pre-Rendering (PPR) is the most exciting Next.js feature since Server Components. With the new use cache directive, Vercel's framework finally solves the dilemma: static or dynamic?

The 2026 answer: both, on the same page.

The Problem PPR Solves

Imagine an e-commerce page:

ElementNatureNeed
Header / LogoStaticSame for everyone
Product infoSemi-dynamicRarely changes
PriceDynamicReal-time
CartVery dynamicUnique per user

Before PPR: you had to choose SSG, SSR, or ISR. With PPR, each element renders optimally.

How PPR Works

  1. Build time: pre-renders static parts
  2. Edge: static shell served from CDN instantly
  3. Streaming: dynamic parts streamed in parallel

The use cache Directive

async function ProductInfo({ id }: { id: string }) {
  "use cache";
  const product = await db.product.findUnique({ where: { id } });
  return <div>{product.name} - {product.description}</div>;
}

async function LivePrice({ id }: { id: string }) {
  const price = await fetchLivePrice(id);
  return <span>{price} EUR</span>;
}

export default async function ProductPage({ params }) {
  return (
    <div>
      <Suspense fallback={<ProductSkeleton />}>
        <ProductInfo id={params.id} />
      </Suspense>
      <Suspense fallback={<PriceSkeleton />}>
        <LivePrice id={params.id} />
      </Suspense>
    </div>
  );
}

PPR vs ISR vs SSR

CriteriaSSRISRPPR
SpeedMediumFastUltra-fast
FreshnessReal-timeDelayReal-time (dynamic)
Server loadHighMediumLow

Migration

Step 1: Enable PPR

const nextConfig = {
  experimental: { ppr: true },
};

Step 2: Classify components

  • Staticuse cache with long duration
  • Semi-dynamicuse cache with revalidation
  • Dynamic → no cache

Step 3: Wrap with Suspense

Each cacheable component in a <Suspense> with fallback.

Core Web Vitals Impact

MetricBefore PPRAfter PPR
LCP2.5s0.8s
FID100ms40ms
CLS0.150.02

Conclusion

PPR is a paradigm shift: the best of both worlds without compromise.


Need help migrating to PPR? At BOVO Digital, we optimize web performance with the latest Next.js technologies.

Tags

#Next.js#PPR#Performance#React#use cache#Server Components#Web Vitals
William Aklamavo

William Aklamavo

Web development and automation expert, passionate about technological innovation and digital entrepreneurship.

Related articles