Gdy strona internetowa zawiera wiele obrazów, ładowanie wszystkich zdjęć w momencie otwarcia strony niepotrzebnie wydłuża czas początkowego ładowania. Lazy loading — czyli ładowanie odroczone — to technika, która pozwala ładować każdy obraz dopiero wtedy, gdy użytkownik zaraz go zobaczy. Łatwa do wdrożenia, znacząco poprawia wydajność witryny i doświadczenie użytkownika.
Definicja lazy loading
Lazy loading (dosłownie «leniwe ładowanie») polega na opóźnieniu ładowania zasobów, które nie są od razu widoczne na ekranie. Zastosowane do obrazów oznacza, że tylko obrazy znajdujące się w widocznym obszarze w momencie ładowania strony (viewport) są pobierane natychmiast. Pozostałe obrazy ładują się stopniowo, gdy użytkownik przewija stronę.
Bez lazy loading przeglądarka pobiera wszystkie obrazy strony zaraz po jej otwarciu — nawet te na samym dole, których użytkownik może nigdy nie zobaczyć.
Jak działa lazy loading?
Istnieją dwa główne podejścia do implementacji lazy loading obrazów:
1. Natywny atrybut HTML loading="lazy"
Od 2019 roku nowoczesne przeglądarki natywnie obsługują lazy loading za pomocą prostego atrybutu HTML:
<img src="photo.jpg" alt="Opis" loading="lazy">Przeglądarka automatycznie decyduje, kiedy załadować obraz na podstawie pozycji przewijania użytkownika. To dziś zalecana metoda: nie jest potrzebna żadna biblioteka JavaScript.
2. Intersection Observer API (JavaScript)
Przed standaryzacją natywnego atrybutu programiści używali Intersection Observer API do wykrywania momentu wejścia obrazu w viewport i wyzwalania jego ładowania w tym momencie. Podejście to pozostaje przydatne przy bardziej zaawansowanych zachowaniach lub animacjach wejścia obrazów.
Jakie są zalety lazy loading?
Wydajność i czas ładowania
Zmniejszając liczbę obrazów ładowanych przy starcie, lazy loading obniża początkowy ciężar strony i przyspiesza jej renderowanie. Metryki wydajności takie jak Largest Contentful Paint (LCP) i Time to Interactive (TTI) ulegają poprawie.
Oszczędność przepustowości
Obrazy na dole strony są pobierane tylko wtedy, gdy użytkownik faktycznie do nich dotrze. Na długiej stronie z wieloma elementami wizualnymi może to stanowić znaczną oszczędność — zwłaszcza dla odwiedzających na urządzeniach mobilnych lub wolnym połączeniu.
SEO i Core Web Vitals
Google uwzględnia Core Web Vitals w swoim rankingu. Lepszy LCP, bezpośrednio wpływający na ładowanie obrazów, może mieć pozytywny wpływ na pozycjonowanie w wynikach wyszukiwania.
Lazy loading: czego nie robić
Lazy loading nie jest odpowiedni dla wszystkich obrazów. Należy unikać dwóch częstych błędów:
- Nigdy nie stosuj
loading="lazy"do obrazów hero lub powyżej linii zgięcia — te obrazy są widoczne przy ładowaniu, opóźnienie ich wyświetlania pogorszyłoby LCP i doświadczenie użytkownika. - Nie pomijaj atrybutów
widthiheight— bez zdefiniowanych wymiarów przeglądarka nie może zarezerwować miejsca dla obrazu przed jego załadowaniem, co powoduje przesunięcia układu (layout shifts) szkodliwe dla Cumulative Layout Shift (CLS).
Warto wiedzieć: dla obrazów widocznych natychmiast przy ładowaniu (baner, hero image, logo) użyj atrybutu loading="eager" lub po prostu pomiń atrybut — to domyślne zachowanie przeglądarki.Kompatybilność z przeglądarkami
| Przeglądarka | Wsparcie loading="lazy" |
|---|---|
| Chrome | ✅ Od wersji 77 (2019) |
| Firefox | ✅ Od wersji 75 (2020) |
| Safari | ✅ Od wersji 15.4 (2022) |
| Edge | ✅ Od wersji 79 (2020) |
| Internet Explorer | ❌ Nieobsługiwane |
Lazy loading i hosting obrazów
Korzystając z serwisu hostingu obrazów do przechowywania i dystrybucji elementów wizualnych, pamiętaj, aby zawsze dodawać atrybut loading="lazy" do obrazów, które nie są widoczne od razu. Połączenie wydajnego hostingu (CDN, automatyczna kompresja) z lazy loading maksymalizuje szybkość wyświetlania stron.
Warto wiedzieć: wysokiej jakości serwis hostingu obrazów dostarcza stabilne bezpośrednie URL dla każdego obrazu, co ułatwia integrację lazy loading: wystarczy dodaćloading="lazy"do tagu<img>bez modyfikowania URL źródłowego.