Home Bez kategorii Lazy loading obrazków – jak przyspieszyć stronę bez utraty jakości grafiki

Lazy loading obrazków – jak przyspieszyć stronę bez utraty jakości grafiki

admin
Lazy loading obrazków – jak przyspieszyć stronę bez utraty jakości grafiki - ilustracja artykulu

Lazy loading obrazków to technika odraczająca pobieranie grafik do chwili, w której użytkownik realnie zbliża się do nich podczas przewijania strony. Poprawnie wdrożony lazy loading obrazków potrafi zredukować wagę pierwszego wczytania o 60–80% i skrócić czas do pełnej interaktywności z czterech sekund do niespełna dwóch na łączu mobilnym. Różnica jest odczuwalna szczególnie w sklepach z elektroniką, gdzie jedna karta kategorii potrafi zawierać sto miniatur klawiatur, myszy i monitorów, a każda z nich waży 80–150 kB. Zamiast wysyłać przeglądarce dwanaście megabajtów danych naraz, serwer oddaje kilkaset kilobajtów potrzebnych do wyrenderowania pierwszego ekranu, a resztę dosyła w miarę scrollowania. Efekt widać zarówno w raportach Core Web Vitals, jak i w statystykach porzuceń koszyka, które w polskich sklepach spadają średnio o 5–9 punktów procentowych po optymalizacji grafiki. Poniżej znajdziesz konkretne parametry wdrożenia, koszty i pułapki, które potrafią zniweczyć cały zysk wydajnościowy.

Jak działa leniwe ładowanie grafik pod maską

Przeglądarka, parsując dokument, natychmiast kolejkuje do pobrania każdy znacznik obrazka, nawet ten oddalony o pięć ekranów. Atrybut loading=lazy przerywa ten schemat: żądanie rusza dopiero wtedy, gdy element zbliży się do widocznego obszaru na odległość około 1250 pikseli przy szybkim łączu i nawet 2500 pikseli przy wolniejszym.

Starsze szablony i galerie sterowane skryptami korzystają z IntersectionObserver. Adres pliku trafia do atrybutu data-src, a obserwator podmienia go na src w momencie przecięcia progu widoczności. Rozwiązanie daje pełną kontrolę nad marginesem i animacją pojawiania się, kosztem 2–4 kB dodatkowego kodu oraz ryzyka, że przy wyłączonym JavaScripcie zdjęcia nie pojawią się wcale.

Kluczowa zasada brzmi: grafiki widoczne na pierwszym ekranie nigdy nie mogą być odraczane. Baner główny i pierwsza miniatura w karuzeli powinny mieć fetchpriority=high, a pozostałe elementy decoding=async. Odwrócenie tej kolejności potrafi wydłużyć LCP o 600–900 milisekund, czyli dokładnie tyle, ile zyskujesz na całej optymalizacji.

Natywny atrybut kontra biblioteka JavaScript

Natywne rozwiązanie wygrywa prostotą – jedna linia w szablonie, zero zależności, wsparcie we wszystkich aktualnych przeglądarkach. Sprawdza się w 90% projektów, od blogów po katalogi, w których pojedynczy produkt taki jak klawiatura mechaniczna prezentowany jest na ośmiu zdjęciach studyjnych i dwóch animacjach podświetlenia.

Biblioteki mają sens tam, gdzie potrzebujesz progresywnego rozmycia, ładowania tła sekcji lub odroczenia ramek wideo. Lekkie skrypty klasy lazysizes ważą około 3 kB po kompresji i pozwalają ustawić własny margines wyprzedzenia, na przykład 400 pikseli, co eliminuje efekt pustych kwadratów przy szybkim przewijaniu na telefonie.

Core Web Vitals i pozycjonowanie strony po optymalizacji grafiki

Lazy loading obrazków działa na trzy wskaźniki naraz. Największy zysk widać w LCP: usunięcie z kolejki czterdziestu miniatur spod pierwszego ekranu skraca ten parametr z 3,4 do 1,9 sekundy na typowym łączu LTE. Próg dobrego wyniku wynosi 2,5 sekundy, więc jeden zabieg przenosi stronę z czerwonej do zielonej strefy.

Pozycjonowanie strony korzysta na tym pośrednio, przez sygnały jakości doświadczenia i realne zachowanie użytkowników. Sesje na wolno ładujących się kartach produktowych – na przykład tam, gdzie monitor do komputera pokazany jest w sześciu ujęciach po 400 kB – kończą się powrotem do wyników wyszukiwania średnio o 30% częściej.

Trzeci obszar to budżet indeksowania. Robot pobierający mniej bajtów na wejście odwiedza więcej adresów w tej samej jednostce czasu, co przy katalogu liczącym kilkanaście tysięcy podstron przekłada się na szybsze wykrywanie nowych kategorii. Efekt kumuluje się przez kilka miesięcy i widać go w raporcie stanu indeksu.

Wdrożenie w WordPressie i autorskich szablonach

W WordPressie atrybut leniwego ładowania dodawany jest do treści automatycznie, ale motywy premium często nadpisują tę logikę własnym skryptem karuzeli. Po zalogowaniu do panelu (wordpress logowanie pod adresem /wp-admin) sprawdź w źródle strony, czy przy obrazkach nie występuje jednocześnie data-src i loading=lazy – podwójny mechanizm potrafi zablokować pierwsze renderowanie.

Wtyczki optymalizacyjne kosztują od 0 do około 400 zł rocznie za licencję na jedną domenę i zwykle łączą leniwe ładowanie z konwersją do WebP oraz CDN. Konfiguracja sprowadza się do trzech decyzji: wykluczenia logo i banera z odraczania, ustawienia progu wyprzedzenia i włączenia rezerwacji miejsca pod obrazek.

Przy autorskich szablonach odpowiedzialność przenosi się na etap, jakim jest projektowanie stron internetowych. Makieta powinna z góry definiować proporcje kontenerów, żeby atrybuty width i height trafiły do kodu razem z pierwszą wersją layoutu, zamiast być doklejane w pośpiechu tydzień przed startem serwisu.

Formaty, hosting i realne koszty optymalizacji

Odroczenie żądań nie zwalnia z pracy nad wagą plików. Zdjęcie produktowe w JPEG o szerokości 1600 pikseli waży 320 kB, ten sam kadr w WebP około 140 kB, a w AVIF poniżej 90 kB przy porównywalnej jakości wizualnej. Poniższe zestawienie pokazuje typowe wartości dla katalogu sprzętu komputerowego.

Lazy loading obrazków – jak przyspieszyć stronę bez utraty jakości grafiki - zdjecie w tresci
Zdj. tematyczne: Lazy loading obrazków – jak przyspieszyć stro (fot. Pixabay/Pexels)
FormatWaga zdjęcia 1600 pxPrzezroczystośćTypowe zastosowanie
JPEG300–340 kBniearchiwalne galerie, starsze integracje
WebP130–150 kBtakdomyślny format kart produktowych
AVIF70–95 kBtakbanery i duże zdjęcia hero
PNG600–900 kBtakzrzuty ekranu i grafiki z tekstem
SVG8–20 kBtakikony, logotypy, proste ilustracje

Infrastruktura decyduje o tym, jak szybko dolatuje doładowywana partia zdjęć. Współdzielony hosting za 15 zł miesięcznie odpowiada na żądanie w 300–500 ms, natomiast OVH VPS z dyskiem NVMe schodzi poniżej 90 ms i utrzymuje ten wynik przy kilkuset równoczesnych połączeniach w godzinach szczytu.

Do budżetu doliczasz narzędzia okołosklepowe: eksport ofert do Google Merchant Center, w którym miniatury muszą mieć minimum 250 pikseli, oraz konta pocztowe, gdzie Google Workspace cena zaczyna się od kilkudziesięciu złotych miesięcznie za użytkownika. Sama optymalizacja grafiki to zwykle jednorazowe 800–2500 zł dla średniego katalogu.

Osobny przypadek to grafiki tworzone wewnętrznie. Ilustracje rysowane na urządzeniu takim jak tablet graficzny Wacom zapisuj od razu w rozdzielczości docelowej i w formacie SVG, jeśli to możliwe – wektor waży kilkanaście kilobajtów, skaluje się bezstratnie i nie wymaga żadnego odraczania.

Błędy, które niweczą zysk z odraczania grafik

Najkosztowniejszy błąd to brak zarezerwowanego miejsca. Obrazek pojawiający się nagle przesuwa tekst w dół, wskaźnik CLS rośnie z 0,02 do 0,25, a użytkownik klika w nieodpowiedni element. Rozwiązaniem są atrybuty width i height albo reguła aspect-ratio ustawiona w arkuszu stylów dla każdego kontenera.

Drugi klasyk to odroczenie zdjęcia, które samo jest elementem LCP. Zdarza się przy hurtowym dodaniu atrybutu przez wtyczkę do wszystkich obrazków w szablonie. Wykluczenie pierwszych dwóch grafik z listy zajmuje minutę, a skraca czas największego wyrenderowania o kilkaset milisekund na każdej podstronie.

Trzeci problem dotyczy widoczności zdjęć w wyszukiwarce grafiki. Jeśli adres pliku istnieje wyłącznie w atrybucie data-src, robot może go nie odczytać, przez co lazy loading obrazków realnie osłabia pozycjonowanie strony w google. Zabezpieczeniem jest mapa witryny dla obrazów oraz znacznik noscript z klasycznym src.

  • Brak atrybutów width i height lub reguły aspect-ratio na kontenerze zdjęcia.
  • Odraczanie grafiki będącej elementem LCP na pierwszym ekranie.
  • Jednoczesne działanie wtyczki i skryptu motywu na tym samym obrazku.
  • Adres pliku wyłącznie w data-src, bez wersji zapasowej w noscript.
  • Miniatury w PNG tam, gdzie wystarczy WebP o czterokrotnie mniejszej wadze.

Jak sprawdzić, czy wdrożenie działa

Otwórz kartę sieci w narzędziach deweloperskich, przefiltruj żądania po typie obrazek i odśwież stronę bez przewijania. Przy poprawnej konfiguracji katalogu z peryferiami – gdzie obok siebie stoją klawiatura gamingowa mechaniczna, myszy i podkładki – pobierze się od czterech do ośmiu plików zamiast czterdziestu.

Drugim testem jest pomiar polowy z realnych sesji. Porównaj podstronę kategorii kompaktowych klawiatur, opisaną frazą klawiatura mechaniczna 60, przed zmianą i po niej – miarodajny wynik zobaczysz po 28 dniach zbierania danych, gdy próbka obejmie także wolne łącza i starsze telefony.

Jak wdrożyć leniwe ładowanie bez utraty ruchu z wyszukiwarki grafik?

Zacznij od pozostawienia prawdziwego adresu pliku w atrybucie src i użycia natywnego atrybutu loading zamiast podmiany przez skrypt. Wtedy robot widzi ten sam kod co przeglądarka i nie musi wykonywać JavaScriptu, żeby dotrzeć do grafiki. Uzupełnij mapę witryny o sekcję obrazów, wypełnij atrybuty alt konkretnym opisem produktu, a nie nazwą pliku typu IMG_2481, i zadbaj o unikalne miniatury dla każdego wariantu kolorystycznego. Na koniec pobierz stronę narzędziem do sprawdzania renderowania i porównaj listę widocznych zasobów z tą z karty sieci. Jeśli obie się zgadzają, ruch z wyszukiwarki grafik pozostanie nienaruszony, a czas ładowania spadnie. Kontrolę powtórz po każdej większej aktualizacji motywu.

Czy odraczanie grafik ma sens przy małym blogu?

Tak, choć skala zysku zależy od długości wpisów i liczby ilustracji. Artykuł poradnikowy z dwudziestoma zrzutami ekranu waży zwykle 4–6 MB, z czego użytkownik ogląda realnie trzy pierwsze grafiki, zanim zdecyduje, czy zostaje na stronie. Odroczenie reszty skraca czas pierwszego renderowania o 1,5–2 sekundy na łączu komórkowym, a to najczęstszy scenariusz odwiedzin bloga. Przy serwisie z pięcioma zdjęciami na wpis różnica wyniesie 100–200 milisekund i lepiej zainwestować czas w kompresję oraz format WebP. Prosty test: jeśli suma wagi grafik pod pierwszym ekranem przekracza 500 kB, odraczanie się opłaca. Wynik sprawdzisz w karcie sieci w kilkanaście sekund.

Co zrobić, gdy zdjęcia migają lub nie pojawiają się po przewinięciu?

Miganie oznacza zwykle zbyt mały margines wyprzedzenia albo animację pojawiania się nałożoną na element, który dopiero się dekoduje. Zwiększ próg do 300–500 pikseli, a przejście skróć do 150 milisekund lub usuń całkowicie. Jeśli zdjęcia nie pojawiają się wcale, sprawdź trzy rzeczy: konflikt dwóch mechanizmów odraczania, czyli wtyczki i motywu, błąd skryptu w konsoli blokujący dalsze wykonanie oraz reguły cache po stronie CDN, które mogą serwować starą wersję szablonu. Wyczyść pamięć podręczną, wyłącz tymczasowo wtyczkę optymalizacyjną i przeładuj stronę z pominięciem cache. W dziewięciu przypadkach na dziesięć źródłem jest podwójna implementacja, a nie sam mechanizm przeglądarki.

Zobacz też