✅ How It Works
Your page renders top-down (like a waterfall).
As soon as some HTML is ready (like header/nav), it’s flushed to the browser.
Components that are still loading (like awaited data or suspense boundaries) are rendered after and streamed later.
It behaves like a hybrid between SSR and React Server Components with Suspense.
✅ What 15.3.4 Brings to PPR
> 🦾 Build-time improvements with Turbopack
- next build --turbopack is now available in alpha for production builds, delivering major build-time speedups—28% faster on 4-core, up to 83% on high-end machines 
- While still alpha, it's a massive leap forward for rapid iteration in staging environments. 
> 🔍 Better observability & routing
- Client instrumentation hook lets you initialize analytics or performance tracking before client code loads 
- Navigation hooks (onNavigate, useLinkStatus) give you granular control over route changes, enabling improved loading states and UX 
These enhancements directly support PPR by giving you both a static shell and dynamic loading control, with fewer toolchain limitations.
🔄 PPR + Next.js 15.3.4 vs CSR, SSR, SSG, ISR
| Strategy | Build Time | Runtime                           | Latest with 15.3.4                  |
| -------- | ---------- | --------------------------------  | --------------------------------
| **CSR**  | ❌        | ✅                                | No Vercel support                
| **SSR**  | ❌        | ✅                                | Fully supported              
| **SSG**  | ✅        | ❌                                | Stable via SSG & ISR              
| **ISR**  | ✅        | ✅                                | Best static/dynamic mix     
| **PPR**  | ✅        | ✅ (+streaming & instrumentation) | *Enhanced by React 19 readiness*
> Why it matters:
- Streamed PPR benefits from React¹⁹ and React 18+ streaming APIs supported in v15.3.4. 
- Your app now gets both static safety and dynamic flexibility, with improved DX and tooling. 
🛠️ Using PPR in 15.3.4
// app/page.tsx — static shell + dynamic feed
import StaticLayout from './StaticLayout';
import DynamicFeed from './DynamicFeed';
export default function Page() {
  return (
    <>
      <StaticLayout />
      <DynamicFeed /> {/* has dynamic = 'force-dynamic' */}
    </>
  );
}
// components/DynamicFeed.tsx
export const dynamic = 'force-dynamic';
export default async function DynamicFeed() {
  const data = await fetch(
    'https://api.example.com/feed',
    { cache: 'no-store' }
  ).then(r => r.json());
  return <Feed data={data} />;
}
// instrumentation-client.ts
performance.mark('app-init');
- Use cache: 'force-static' for static, force-dynamic for runtime components.
- Stream dynamic parts via React Suspense.
- Add instrumentation-client.ts for observability.
- Use onNavigate hooks to manage loading UIs.
> 🎯 KeyPoints - 15.3.4
- ✅ Latest stable version is 15.3.4 as of June 2025
- 🛠️ Full support for Turbopack builds in alpha.
- 🧠 Enhanced routing & instrumentation APIs.
- 🚀 PPR gets even better streaming, control, and observability.
- 🤖 Built on React 19 readiness—prepares for the future.
 
 
              
 
    
Top comments (0)