5 Next.js App Router Performance Tricks for 2026
Why App Router Performance Matters
With the shift to React Server Components (RSC) in Next.js, performance optimization has fundamentally changed. If you are still writing Next.js like it is 2022, you are missing out on major performance gains and hurting your Google Core Web Vitals.
Here are the top 5 performance tricks you must implement in your Next.js App Router projects to achieve a perfect 100/100 Lighthouse score.
1. Leverage React Server Components (RSC) by Default
By default, all components inside the App Router (app/ directory) are Server Components. Keep them that way unless you absolutely need client-side interactivity (like onClick, useState, or browser APIs).
- The Trick: When you do need interactivity, push the
"use client"directive as far down the component tree as possible. Don't put"use client"on a page layout if only a single button needs state. Isolate that button into its own client component and import it. This drastically reduces your client-side JavaScript bundle.
2. Optimize Images with next/image and Priority
Images are usually the largest assets on a page. The native Next.js <Image> component automatically serves highly compressed WebP/AVIF formats and prevents Cumulative Layout Shift (CLS).
- The Trick: For any image that appears "above the fold" (visible immediately when the page loads, like a hero image), add the
priorityattribute. This tells Next.js to preload the image, drastically improving your Largest Contentful Paint (LCP) score.
import Image from 'next/image';
export default function Hero() {
return (
<Image
src="/hero.jpg"
alt="Hero Section"
width={1200}
height={800}
priority // 👈 Crucial for LCP
/>
);
}
3. Master Route Handlers and Edge Computing
Instead of using traditional Node.js servers for simple API calls, Next.js allows you to use the Edge Runtime.
- The Trick: For API endpoints that do not require heavy Node.js modules (like simple database reads or fetching from an external API), export
export const runtime = 'edge'in yourroute.jsfiles. Edge functions run extremely close to the user globally, reducing API latency from 200ms+ down to ~30ms.
4. Implement Streaming with Suspense
If your page fetches data from a slow database, the user normally has to stare at a blank white screen until the server finishes processing.
- The Trick: Wrap your slow data-fetching Server Components in a React
<Suspense>boundary. Next.js will instantly render the rest of the page (like the Navbar and Footer) and stream the slow component in once it's ready. You can even provide a fallback skeleton UI.
import { Suspense } from 'react';
import SlowDataComponent from './SlowData';
import SkeletonLoader from './Skeleton';
export default function Dashboard() {
return (
<main>
<h1>Welcome Back!</h1>
<Suspense fallback={<SkeletonLoader />}>
<SlowDataComponent />
</Suspense>
</main>
);
}
5. Aggressive Font Optimization with next/font
Custom web fonts usually cause render-blocking issues or flash of unstyled text (FOUT).
- The Trick: Never use
<link>tags in your HTML header for Google Fonts. Usenext/font/google. Next.js will download the font at build time and host it locally. This guarantees 0 layout shift and saves an unnecessary DNS lookup to Google's servers.
Final Thoughts
Next.js gives you incredible tools out-of-the-box, but they only work if you know how to use them. By mastering RSCs, Edge computing, and Streaming, you can build blazing-fast applications that both your users and Google's search algorithms will love.