Quiz

Explain the concept of lazy loading and how it can improve performance

Topics
JavaScriptPerformance
Edit on GitHub

TL;DR

Lazy loading is a design pattern that delays the loading of resources until they are actually needed. This can significantly improve performance by reducing initial load times and conserving bandwidth. For example, images on a webpage can be lazy-loaded so that they only load when they come into the viewport. This can be achieved using the loading="lazy" attribute in HTML or by using JavaScript libraries.

<img src="image.jpg" loading="lazy" alt="Lazy loaded image" />

The concept of lazy loading and how it can improve performance

What is lazy loading?

Lazy loading is a design pattern used to defer the initialization of an object until the point at which it is needed. This can be applied to various types of resources such as images, videos, scripts, and even data fetched from APIs.

How does lazy loading work?

Lazy loading works by delaying the loading of resources until they are actually needed. For example, images on a webpage can be lazy-loaded so that they only load when they come into the viewport. This can be achieved using the loading="lazy" attribute in HTML or by using JavaScript libraries.

Benefits of lazy loading

  • Improved performance: By loading only the necessary resources initially, the page load time is reduced, leading to a faster and more responsive user experience.
  • Reduced bandwidth usage: Lazy loading helps in conserving bandwidth by loading resources only when they are needed.
  • Better user experience: Users can start interacting with the content faster as the initial load time is reduced.

Implementing lazy loading

Using the loading attribute in HTML

The simplest way to implement lazy loading for images is by using the loading attribute in HTML.

<img src="image.jpg" loading="lazy" alt="Lazy loaded image" />

Using JavaScript

For more complex scenarios, you can use JavaScript to implement lazy loading. Here is an example using the Intersection Observer API:

document.addEventListener('DOMContentLoaded', function () {
const lazyImages = document.querySelectorAll('img.lazy');
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.classList.remove('lazy');
observer.unobserve(img);
}
});
});
lazyImages.forEach((image) => {
imageObserver.observe(image);
});
});

In this example, images with the class lazy will only load when they come into the viewport.

Further reading

Edit on GitHub