Performance: Nav tabs and pills
MEDIUM IMPACT
This affects page load speed and interaction responsiveness by how navigation elements are rendered and updated in the browser.
<ul class="nav nav-tabs" role="tablist"> <li class="nav-item"><button class="nav-link active" id="tab1-tab" data-bs-toggle="tab" data-bs-target="#tab1" type="button" role="tab" aria-controls="tab1" aria-selected="true">Tab 1</button></li> <li class="nav-item"><button class="nav-link" id="tab2-tab" data-bs-toggle="tab" data-bs-target="#tab2" type="button" role="tab" aria-controls="tab2" aria-selected="false">Tab 2</button></li> </ul> <div class="tab-content"> <div class="tab-pane fade show active" id="tab1" role="tabpanel" aria-labelledby="tab1-tab">Lightweight initial content or lazy loaded content</div> <div class="tab-pane fade" id="tab2" role="tabpanel" aria-labelledby="tab2-tab" hidden></div> </div>
<ul class="nav nav-tabs"> <li class="nav-item"><a class="nav-link active" href="#tab1" data-bs-toggle="tab">Tab 1</a></li> <li class="nav-item"><a class="nav-link" href="#tab2" data-bs-toggle="tab">Tab 2</a></li> <!-- many more tabs --> </ul> <div class="tab-content"> <div class="tab-pane fade show active" id="tab1">Heavy content with images and scripts</div> <div class="tab-pane fade" id="tab2">Heavy content with images and scripts</div> <!-- many more tab panes --> </div>
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| All tabs content rendered at once | High (many nodes) | Multiple on tab switch | High due to repaint | [X] Bad |
| Lazy load tab content on demand | Low (only active tab nodes) | Single on tab switch | Low repaint cost | [OK] Good |