Bird
Raised Fist0
NextJSframework~8 mins

Layout vs template difference in NextJS - Performance Comparison

Choose your learning style10 modes available
Performance: Layout vs template difference
MEDIUM IMPACT
This concept affects how quickly the main page content loads and how efficiently the browser updates the UI when navigating between pages.
Sharing common UI parts across multiple pages
NextJS
export default function Layout({ children }) {
  return (
    <>
      <header>Site Header</header>
      <main>{children}</main>
      <footer>Site Footer</footer>
    </>
  )
}

// Pages use Layout to wrap content, so header/footer render once.
Layout keeps shared UI stable, so only main content changes on navigation, reducing reflows.
📈 Performance GainSingle reflow for main content changes, improving LCP and reducing CPU work.
Sharing common UI parts across multiple pages
NextJS
export default function Page() {
  return (
    <>
      <header>Site Header</header>
      <main>Page content</main>
      <footer>Site Footer</footer>
    </>
  )
}
Repeats header and footer on every page causing full re-render and slower load on navigation.
📉 Performance CostTriggers full reflow and repaint on every page load, increasing LCP.
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Template with repeated header/footerHigh (full page nodes recreated)Multiple reflows per navigationHigh paint cost due to full repaint[X] Bad
Layout with shared header/footerLow (shared nodes reused)Single reflow for content updateLower paint cost focused on content[OK] Good
Rendering Pipeline
Layouts keep shared UI elements stable in the DOM, so only the main content updates during navigation. Templates that repeat full page structure cause the browser to recalculate styles and layout for all elements each time.
→Style Calculation
→Layout
→Paint
⚠️ BottleneckLayout stage is most expensive when full page structure changes repeatedly.
Core Web Vital Affected
LCP
This concept affects how quickly the main page content loads and how efficiently the browser updates the UI when navigating between pages.
Optimization Tips
1Use layouts to keep shared UI stable across pages.
2Avoid repeating full page structure in every page component.
3Reducing DOM changes lowers layout recalculations and speeds up LCP.
Performance Quiz - 3 Questions
Test your performance knowledge
Which pattern reduces layout recalculations when navigating pages in Next.js?
ARepeating header and footer in every page component
BLoading all page content in one big template
CUsing a layout component to wrap shared UI
DUsing inline styles for every element
DevTools: Performance
How to check: Record a page navigation in DevTools Performance panel. Look at the Layout and Paint events to see how much work is done.
What to look for: Less Layout and Paint time means better performance. Repeated full page reflows indicate template pattern; minimal reflows indicate layout usage.

Practice

(1/5)
1. In Next.js, what is the main role of a layout component?
easy
A. To manage client-side state
B. To provide common page structure like headers and footers
C. To handle API requests
D. To define unique content for each page

Solution

  1. Step 1: Understand layout purpose

    Layouts in Next.js wrap pages to provide shared UI elements like headers and footers.
  2. Step 2: Differentiate from templates

    Templates hold unique page content, not common structure.
  3. Final Answer:

    To provide common page structure like headers and footers -> Option B
  4. Quick Check:

    Layout = common structure [OK]
Hint: Layouts wrap pages with shared UI elements [OK]
Common Mistakes:
  • Confusing layouts with templates
  • Thinking layouts handle data fetching
  • Assuming layouts manage state
2. Which of the following is the correct way to define a layout in Next.js 14+ using the App Router?
easy
A. export default function Layout({ children }) { return
{children}
}
B. function Layout() { return
Page Content
}
C. const Layout = () =>
Header
D. export function layout() { return
{children}
}

Solution

  1. Step 1: Check export and props

    Layouts must be default exported and receive children prop to wrap page content.
  2. Step 2: Validate syntax

    export default function Layout({ children }) { return
    {children} } correctly exports a function with { children } and returns JSX wrapping children.
  3. Final Answer:

    export default function Layout({ children }) { return <div>{children}</div> } -> Option A
  4. Quick Check:

    Default export + children prop = export default function Layout({ children }) { return
    {children}
    } [OK]
Hint: Layouts must export default and accept children [OK]
Common Mistakes:
  • Not exporting default
  • Missing children prop
  • Using lowercase function name for layout
3. Given this Next.js layout component:
export default function Layout({ children }) {
  return (
    <html>
      <body>
        <header>Site Header</header>
        {children}
        <footer>Site Footer</footer>
      </body>
    </html>
  )
}

And a page component:
export default function Page() {
  return <main>Welcome!</main>
}

What will be the rendered HTML structure?
medium
A.
Site Header
Welcome!
Site Footer
B.
Welcome!
C.
Site Header
Site Footer
D.
Welcome!

Solution

  1. Step 1: Understand layout wrapping

    The layout wraps the page content inside <html> and <body> tags, adding header and footer around children.
  2. Step 2: Insert page content

    The page returns <main>Welcome!</main>, which is placed where {children} is in layout.
  3. Final Answer:

    <html><body><header>Site Header</header><main>Welcome!</main><footer>Site Footer</footer></body></html> -> Option A
  4. Quick Check:

    Layout wraps page content with header/footer [OK]
Hint: Children content appears inside layout's wrapper [OK]
Common Mistakes:
  • Ignoring layout wrapping
  • Thinking page replaces entire layout
  • Missing header or footer in output
4. You wrote this layout in Next.js:
export default function Layout() {
  return (
    <div>
      <header>Header</header>
      {children}
      <footer>Footer</footer>
    </div>
  )
}

But the page content does not render inside the layout. What is the problem?
medium
A. The footer tag is invalid in layouts
B. The layout should not have a header
C. The layout function does not accept the children prop
D. The layout must be a class component

Solution

  1. Step 1: Check function parameters

    The layout must accept { children } as a parameter to render page content inside.
  2. Step 2: Identify missing children prop

    The code misses { children } in the function signature, so it cannot render page content.
  3. Final Answer:

    The layout function does not accept the children prop -> Option C
  4. Quick Check:

    Missing children prop causes no page content [OK]
Hint: Layouts must accept children prop to render page content [OK]
Common Mistakes:
  • Forgetting to add children parameter
  • Thinking header/footer cause error
  • Believing layouts must be class components
5. You want to create a Next.js page that uses a layout with a sidebar and header. The sidebar should only appear on some pages, but the header should always be present. How should you organize layouts and templates to achieve this?
hard
A. Add sidebar inside each page component instead of layouts
B. Put header and sidebar in the same layout used by all pages
C. Use templates only and avoid layouts for shared UI
D. Create a main layout with header, then nested layouts for pages with sidebar

Solution

  1. Step 1: Identify shared and conditional UI

    The header is shared by all pages, so it belongs in the main layout. Sidebar is conditional, so it fits in nested layouts.
  2. Step 2: Use nested layouts

    Create a main layout with header, then nest layouts for pages needing sidebar to add it without affecting others.
  3. Final Answer:

    Create a main layout with header, then nested layouts for pages with sidebar -> Option D
  4. Quick Check:

    Nested layouts handle conditional UI [OK]
Hint: Use nested layouts for conditional UI parts [OK]
Common Mistakes:
  • Putting all UI in one layout causing unwanted sidebar
  • Adding sidebar directly in pages losing layout benefits
  • Avoiding layouts and mixing shared UI in templates
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard