Performance: Accordion component
MEDIUM IMPACT
This affects page load speed and interaction responsiveness by controlling how much content is rendered and how often layout recalculations happen when toggling sections.
<div class="accordion"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> Section 1 </button> </h2> <div id="collapseOne" class="accordion-collapse collapse show"> <div class="accordion-body"> <!-- Content loaded or rendered only when expanded --> <img src="large-image.jpg" alt="Large image" loading="lazy"> <p>Lots of text and media here...</p> </div> </div> </div> <!-- More accordion items with lazy loading or conditional rendering --> </div>
<div class="accordion"> <div class="accordion-item"> <h2 class="accordion-header"> <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> Section 1 </button> </h2> <div id="collapseOne" class="accordion-collapse collapse show"> <div class="accordion-body"> <!-- Large heavy content always rendered --> <img src="large-image.jpg" alt="Large image"> <p>Lots of text and media here...</p> </div> </div> </div> <!-- More accordion items with heavy content --> </div>
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Render all content upfront | High (many nodes rendered) | Multiple reflows on toggle | High paint cost due to large content | [X] Bad |
| Lazy load images and defer content | Lower (only visible nodes rendered) | Single reflow per toggle | Lower paint cost | [OK] Good |