이미지 로딩 지연 효과를 재현하는 자바스크립트 Lazy Loading 기법

우리는 인터넷을 통해 수많은 웹 페이지를 방문하게 되는데, 때로는 웹 페이지의 로딩 속도가 느려질 수 있습니다. 이러한 웹 페이지의 로딩 속도 문제 중 하나는 이미지 파일의 로딩 시간입니다. 이미지 파일이 많거나 크기가 큰 경우, 웹 페이지가 완전히 로드되기 전에 이미지 파일이 모두 로딩되기를 기다려야 할 수 있습니다.

이 문제를 해결하기 위해 많은 웹 개발자들이 “Lazy Loading”이라는 기법을 사용합니다. “Lazy Loading”은 웹 페이지 로딩 시에 모든 이미지 파일을 동시에 로딩하는 대신, 사용자가 해당 이미지를 실제로 볼 수 있는 시점에서 로딩하는 방식입니다. 이렇게 함으로써 웹 페이지의 로딩 시간을 줄이고, 사용자 경험을 향상시킬 수 있습니다.

자바스크립트 Lazy Loading 라이브러리

다양한 자바스크립트 라이브러리를 사용하여 이미지 로딩을 지연시키는 Lazy Loading 효과를 구현할 수 있습니다. 여기서는 대표적인 두 가지 자바스크립트 Lazy Loading 라이브러리를 살펴보겠습니다.

1. LazyLoad.js

LazyLoad.js는 이미지를 비동기적으로 로딩하는 데 사용되는 간단하고 가벼운 자바스크립트 라이브러리입니다. 아래는 LazyLoad.js를 사용하여 이미지 lazy loading 효과를 구현하는 간단한 예제 코드입니다.

import LazyLoad from 'lazyload';

let lazyLoadInstance = new LazyLoad({
    // LazyLoad.js 옵션 설정
});

lazyLoadInstance.load();

위의 코드에서 LazyLoad 클래스의 객체를 생성하고, 원하는 옵션을 설정한 후 load() 메서드를 호출하여 이미지 로딩 지연 효과를 활성화할 수 있습니다.

2. Intersection Observer API

Intersection Observer API는 이미지가 뷰포트 내에 들어올 때 그 이미지를 로드하는 기능을 제공하는 자바스크립트 API입니다. 아래는 Intersection Observer API를 사용하여 이미지 lazy loading 효과를 구현하는 예제 코드입니다.

const images = document.querySelectorAll('img.lazy');

const lazyLoad = (entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      entry.target.src = entry.target.dataset.src;
      entry.target.classList.remove('lazy');
      observer.unobserve(entry.target);
    }
  });
};

const observer = new IntersectionObserver(lazyLoad, {
  root: null,
  rootMargin: '0px',
  threshold: 0.1
});

images.forEach(image => {
  observer.observe(image);
});

위의 코드에서 이미지 요소들을 선택한 후, Intersection Observer를 생성하고 관찰할 대상을 설정하여 이미지가 뷰포트 내에 들어오면 실제로 이미지를 로드합니다. 이후, lazy 클래스를 제거하여 이미지가 다시 로드되지 않도록 합니다.

결론

이미지 로딩 지연 효과는 웹 페이지의 로딩 속도를 향상시키고 사용자 경험을 향상시킬 수 있는 유용한 기법입니다. Lazy Loading을 구현하기 위해 자바스크립트 Lazy Loading 라이브러리나 Intersection Observer API를 사용할 수 있습니다. 각각의 라이브러리와 API에 대해 자세히 알아보고, 프로젝트에 적합한 기술을 선택하여 이미지 로딩 지연 효과를 구현해 보세요.

참고: LazyLoad.js GitHub, Intersection Observer API MDN

#LazyLoading #웹개발