Bird
Raised Fist0
Laravelframework~8 mins

Template inheritance (@extends, @section, @yield) in Laravel - Performance & Optimization

Choose your learning style10 modes available
Performance: Template inheritance (@extends, @section, @yield)
MEDIUM IMPACT
This affects server-side rendering speed and the size of the HTML sent to the browser, impacting initial page load time.
Reusing layout code across multiple pages
Laravel
@extends('layouts.master')
@section('content')
<div>Page content</div>
@endsection
Blade template inheritance compiles templates once and reuses layouts efficiently, reducing server work and HTML size.
📈 Performance GainReduces server CPU load and HTML size, improving LCP.
Reusing layout code across multiple pages
Laravel
@php echo file_get_contents('header.html'); @endphp
<div>Page content</div>
@php echo file_get_contents('footer.html'); @endphp
Manually including HTML fragments duplicates code and increases server processing time for each request.
📉 Performance CostIncreases server CPU usage and can cause larger HTML responses, slowing LCP.
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Manual HTML includesNo direct DOM impact (server-side)N/ALarger HTML increases paint time[X] Bad
Blade template inheritanceNo direct DOM impact (server-side)N/ASmaller HTML reduces paint time[OK] Good
Rendering Pipeline
Template inheritance happens on the server before HTML is sent. It reduces duplicated HTML and server processing, leading to faster HTML delivery and quicker browser rendering.
→Server-side Rendering
→Network Transfer
→Browser Parsing
⚠️ BottleneckServer-side Rendering when templates are inefficiently composed
Core Web Vital Affected
LCP
This affects server-side rendering speed and the size of the HTML sent to the browser, impacting initial page load time.
Optimization Tips
1Use @extends and @section to avoid repeating layout HTML.
2Precompile Blade templates to reduce server rendering time.
3Keep templates small and modular to minimize HTML size.
Performance Quiz - 3 Questions
Test your performance knowledge
How does using Blade's @extends and @section affect page load performance?
AIt increases the amount of HTML sent to the browser.
BIt delays browser rendering by adding extra JavaScript.
CIt reduces duplicated HTML and server processing, improving load speed.
DIt has no effect on performance.
DevTools: Network
How to check: Open DevTools, go to Network tab, reload page, and inspect HTML document size and load time.
What to look for: Smaller HTML size and faster document load time indicate efficient template inheritance.

Practice

(1/5)
1. What is the main purpose of the @extends directive in Laravel Blade templates?
easy
A. To define a section of content inside a template
B. To display content from a section in the layout
C. To specify which base layout the current view should use
D. To include a partial view inside another view

Solution

  1. Step 1: Understand the role of @extends

    The @extends directive tells Laravel which base layout file the current view should build upon.
  2. Step 2: Differentiate from other directives

    @section defines content blocks, @yield displays them, and including partials uses @include. Only @extends sets the base layout.
  3. Final Answer:

    To specify which base layout the current view should use -> Option C
  4. Quick Check:

    @extends = base layout [OK]
Hint: Remember: @extends picks the base layout file [OK]
Common Mistakes:
  • Confusing @extends with @section
  • Thinking @extends outputs content
  • Mixing @extends with @include
2. Which of the following is the correct syntax to define a content section named 'title' in a Blade template?
easy
A. @section('title') ... @endsection
B. @yield('title') ... @endyield
C. @extends('title') ... @endextends
D. @include('title') ... @endinclude

Solution

  1. Step 1: Recall syntax for defining sections

    In Blade, @section('name') starts a content block, and @endsection ends it.
  2. Step 2: Identify correct usage

    @yield is for displaying sections, @extends sets layout, and @include inserts partials. Only @section defines content.
  3. Final Answer:

    @section('title') ... @endsection -> Option A
  4. Quick Check:

    Define section = @section('name') [OK]
Hint: Use @section('name') to start content blocks [OK]
Common Mistakes:
  • Using @yield to define content
  • Trying to use @extends as a section
  • Confusing @include with section definition
3. Given the following Blade layout file layouts/app.blade.php:
<html>
<head>
    <title>My Site - @yield('title')</title>
</head>
<body>
    @yield('content')
</body>
</html>
And a child view:
@extends('layouts.app')
@section('title', 'Home Page')
@section('content')
<h1>Welcome!</h1>
@endsection
What will be the rendered HTML output?
medium
A. Syntax error due to incorrect section usage
B. My Site - @section('title', 'Home Page') @section('content')

Welcome!

@endsection
C. My Site -
D. My Site - Home Page

Welcome!

Solution

  1. Step 1: Understand @yield and @section interaction

    The layout uses @yield('title') and @yield('content') to display content from child sections.
  2. Step 2: Check child view sections

    The child view defines @section('title', 'Home Page') and a content section with an <h1> tag. These replace the yields in the layout.
  3. Final Answer:

    The rendered HTML includes the title 'Home Page' and the <h1>Welcome!</h1> content -> Option D
  4. Quick Check:

    @yield shows @section content [OK]
Hint: Remember: @yield outputs content from matching @section [OK]
Common Mistakes:
  • Expecting raw @section tags in output
  • Missing that @section('title', 'text') sets inline content
  • Confusing @yield with @section definition
4. Consider this Blade child view code:
@extends('layouts.master')
@section('content')
<p>Hello World</p>
What is the problem with this code?
medium
A. Missing @endsection to close the content section
B. Incorrect use of @extends directive
C. Cannot use HTML inside @section
D. Should use @yield instead of @section

Solution

  1. Step 1: Check section syntax completeness

    The @section('content') directive must be closed with @endsection to mark the end of the content block.
  2. Step 2: Identify missing closing directive

    The code snippet lacks @endsection, causing a syntax error or unexpected behavior.
  3. Final Answer:

    Missing @endsection to close the content section -> Option A
  4. Quick Check:

    Always close @section with @endsection [OK]
Hint: Always pair @section with @endsection [OK]
Common Mistakes:
  • Forgetting to close @section
  • Thinking @yield defines content
  • Believing HTML is not allowed inside sections
5. You have a base layout with multiple @yield placeholders: title, header, and content. You want to create a child view that fills only content and uses a default title and header from the layout. How should you write the child view?
hard
A. @extends('layouts.base') @yield('title') @yield('header') @section('content')

Page content here

@endsection
B. @extends('layouts.base') @section('content')

Page content here

@endsection
C. @extends('layouts.base') @section('title', 'Default Title') @section('header', 'Default Header') @section('content')

Page content here

@endsection
D. @extends('layouts.base') @include('title') @include('header') @section('content')

Page content here

@endsection

Solution

  1. Step 1: Understand default content in layout

    If the base layout provides default content for title and header, you don't need to override those sections in the child view.
  2. Step 2: Write child view with only needed sections

    Only define the content section in the child view to fill that placeholder, leaving others to default.
  3. Final Answer:

    Child view extends layout and defines only content section -> Option B
  4. Quick Check:

    Define only needed sections; others use layout defaults [OK]
Hint: Only override sections you want to change in child views [OK]
Common Mistakes:
  • Overriding sections unnecessarily
  • Using @yield inside child views
  • Trying to include sections with @include
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