Implementación de Lazy Loading con Intersection Observer

Clase 7 de 20Curso de API REST con Javascript: Performance y Usabilidad

Resumen

¿Cómo implementar lazy loading en imágenes con Intersection Observer?

La implementación del lazy loading es una técnica eficiente que mejora el rendimiento de las aplicaciones web al carga imágenes solo cuando los usuarios las ven. Utilizar el Intersection Observer para esta tarea se convierte en una solución óptima por su capacidad de manejar múltiples entradas de forma eficiente y sencilla.

¿Cómo configurar el Intersection Observer?

Para implementar lazy loading en un proyecto, es esencial configurar el Intersection Observer correctamente. Un paso crucial es crear el observador antes de manejar elementos específicos, como las imágenes.

const lazyLoader = new IntersectionObserver((entries, observer) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const image = entry.target;
      image.src = image.dataset.src;
      observer.unobserve(image);
    }
  });
});
  • Callback Function: Se utiliza para manejar las acciones cada vez que un elemento entra o sale de la vista.
  • Entries: Representa los elementos individuales que el observador está siguiendo.
  • Observer: Sí, este objeto permite dejar de observar una imagen una vez se ha cargado.

¿Cómo estructurar tu código para lazy loading?

Organizar bien el código es clave para mantener la claridad y eficiencia. Adoptar una estructura modular puede facilitar la manipulación del DOM para el lazy loading.

function createMovies(movies, container, lazyLoad = false) {
  movies.forEach(movie => {
    const movieImage = document.createElement('img');

    if (lazyLoad) {
      movieImage.dataset.src = movie.imageURL;
      lazyLoader.observe(movieImage);
    } else {
      movieImage.src = movie.imageURL;
    }

    container.appendChild(movieImage);
  });
}
  • Función CreateMovies: Genera y gestiona cada una de las imágenes de las películas para ser observadas y cargadas según la necesidad.
  • Opción LazyLoad: Permite definir si se quiere aplicar el lazy loading a las imágenes de un contenedor específico.

¿Cómo agregar el observer a las imágenes?

Implementar el observador en un contenedor es necesario para que las imágenes sean observadas y cargadas al entrar en el viewport.

function observeImages(images) {
  images.forEach(image => lazyLoader.observe(image));
}
  • Método Observe: Este método dota de la habilidad al observador de seguir uno o varios elementos (en este caso, imágenes).

¿Qué técnicas adicionales se pueden implementar?

Para mejorar y hacer aún más robusta la implementación, puedes emplear algunas técnicas adicionales:

  • Cargar una imagen por defecto: Si alguna imagen no puede cargarse, utiliza una imagen por defecto que ofrezca la misma experiencia visual al usuario.
image.onerror = () => image.src = 'default-image-url.jpg';
  • Verificar la propiedad isIntersecting: Solo cargar la imagen cuando realmente está visible para el usuario.

¿Qué evitar al implementar lazy loading?

Al implementar esta funcionalidad, es conveniente mantener un equilibrio entre la optimización de carga y la experiencia del usuario:

  • Evita cargar todas las imágenes de golpe: Esta implementación se asegura de que únicamente las imágenes visibles sean cargadas.
  • Monitorear el CSS: Cuida que las imágenes tengan el tamaño adecuado inicialmente, para evitar que todas se visualicen incorrectamente.

Implementar lazy loading correctamente con Intersection Observer puede ahorrarte recursos, mejorar la experiencia del usuario y, sobre todo, asegurarte de que tu aplicación funcione de manera más eficiente. Si alguna técnica no encaja con tus necesidades, personalízala y compártela con la comunidad para seguir aprendiendo.