Performance: Carousel slides and controls
MEDIUM IMPACT
This affects page load speed and interaction responsiveness by controlling how many DOM elements and event listeners are active during carousel use.
<div id="carouselExample" class="carousel slide" data-bs-ride="carousel" data-bs-interval="false"> <div class="carousel-inner"> <div class="carousel-item active"> <img src="img1.jpg" class="d-block w-100" alt="..."> </div> <!-- Load other slides lazily or on demand --> </div> <button class="carousel-control-prev" type="button" data-bs-target="#carouselExample" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="visually-hidden">Previous</span> </button> <button class="carousel-control-next" type="button" data-bs-target="#carouselExample" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="visually-hidden">Next</span> </button> </div> <script> // Lazy load images for non-active slides const carousel = document.getElementById('carouselExample'); carousel.addEventListener('slide.bs.carousel', event => { const nextSlide = event.relatedTarget; const img = nextSlide.querySelector('img[data-src]'); if (img && !img.src) { img.src = img.dataset.src; } }); </script>
<div id="carouselExample" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-inner"> <div class="carousel-item active"> <img src="img1.jpg" class="d-block w-100" alt="..."> </div> <div class="carousel-item"> <img src="img2.jpg" class="d-block w-100" alt="..."> </div> <!-- many more slides --> </div> <button class="carousel-control-prev" type="button" data-bs-target="#carouselExample" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="visually-hidden">Previous</span> </button> <button class="carousel-control-next" type="button" data-bs-target="#carouselExample" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="visually-hidden">Next</span> </button> </div>
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| All slides loaded upfront with full controls | High (many nodes) | Multiple reflows per slide change | High paint cost due to many images | [X] Bad |
| Lazy load slides and minimal active DOM nodes | Low (few nodes active) | Single reflow per slide change | Low paint cost with on-demand images | [OK] Good |