Performance: Layout navigation behavior
This affects page load speed and interaction responsiveness during navigation between pages sharing the same layout.
export const metadata = { title: 'Page' }; export default function Page() { return <div>Page content</div>; } // Shared layout in app/layout.tsx wraps pages, reused on navigation
export default function Page() { return <div>Page content</div>; } // No shared layout, each page reloads full HTML and CSS
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Full page reload on navigation | High (full DOM rebuild) | Multiple reflows per navigation | High paint cost due to full repaint | [X] Bad |
| Shared layout with partial page update | Low (only page subtree updated) | Single reflow for content update | Lower paint cost, mostly compositing | [OK] Good |
RootLayout in Next.js?RootLayout doesRootLayout wraps all pages and keeps shared UI elements visible.export default function Layout({ children }) { return <div>{children}</div> } correctly uses a function with a destructured children prop.export default function Layout({ children }) { return <div>{children}</div> } returns <div>{children}</div> and exports default properly./home to /about?
/* RootLayout.js */
export default function RootLayout({ children }) {
return (
<html>
<body>
<header>Site Header</header>
{children}
<footer>Site Footer</footer>
</body>
</html>
)
}
/* About.js */
export default function About() {
return <main>About Page Content</main>
}RootLayout wraps all pages, so header and footer stay visible.{children} renders{children} renders the current page content, here the About page.export default function RootLayout({ children }) {
return (
<html>
<body>
<header>My Header</header>
<main>{children}</main>
</body>
</html>
)
}
// Page component
export default function Page() {
return <div>Page Content</div>
}layout.js or layout.tsx to work as layouts.Pass the test and this pattern moves unknown