Jak przyspieszyć ładowanie zdjęć w sklepie Magento — case study
Magento 2 generuje zdjęcia których nikt nie ogląda i nie obsługuje WebP. Pokazuję jak to naprawiliśmy w sklepie z 50 000 produktami — w tydzień.
Jak przyspieszyć ładowanie zdjęć w sklepie Magento — case study
Wyobraź sobie sklep z 50 000 produktami. Każdy ma kilka zdjęć. Serwer co jakiś czas regeneruje miniatury — i robi to przez kilka dni. Klienci w tym czasie widzą wolno ładujące się strony albo brakujące zdjęcia.
Tak wyglądała sytuacja, z którą przyszedł do mnie klient.
Dlaczego Magento nie radzi sobie ze zdjęciami
Mechanizm miniaturek w Magento 2 ma kilkanaście lat i nie nadąża za tym, co przeglądarki potrafią dziś obsłużyć.
Trzy największe problemy:
Generuje za dużo plików. Magento z góry tworzy dziesiątki rozmiarów każdego zdjęcia — na wypadek gdyby któryś był potrzebny. Przy dużym katalogu to miliony plików. Większość z nich nie zostanie nigdy wyświetlona. Przy 100 000 zdjęć regeneracja trwa od 3 do 6 dni.
Nie obsługuje WebP. WebP to format zdjęć który przy tej samej jakości waży nawet 75% mniej niż JPEG. Przeglądarki obsługują go od ponad dekady. Magento nie konwertuje do WebP bez dodatkowego rozszerzenia.
Nie dostosowuje zdjęć do urządzenia. Standard HTML pozwala podać przeglądarce kilka wariantów zdjęcia i pozwolić jej wybrać właściwy rozmiar — zależnie od ekranu. Magento tego nie robi. Telefon komórkowy pobiera to samo zdjęcie co monitor 4K.
Efekt: sklep ładuje się wolno, serwer jest przeciążony, a miejsce na dysku zajmują pliki których nikt nie potrzebuje.
Rozwiązanie: zdjęcie tworzone tylko wtedy, gdy ktoś go potrzebuje
Zamiast generować wszystko z góry — zaczęliśmy generować na żądanie.
Zasada jest prosta:
- Przeglądarka prosi o konkretne zdjęcie w konkretnym rozmiarze.
- Jeśli plik już istnieje w chmurze (AWS S3) — wraca od razu.
- Jeśli nie istnieje — system tworzy je w locie, oddaje do przeglądarki i odkłada kopię do chmury. Od razu w formacie WebP.
- Następnym razem ten sam plik leci z chmury. Zero generowania.
Każda platforma — sklep, aplikacja mobilna, wersja na tablet — prosi o swój rozmiar. Dostaje dokładnie to czego potrzebuje. Nic więcej.
Co z tego ma sklep?
Szybsze ładowanie strony. Zdjęcia są lżejsze (WebP) i serwowane z chmury, nie z serwera sklepu. Serwer przestał być wąskim gardłem.
Mniejsze koszty. Po 3 miesiącach w chmurze były tylko pliki, które ktoś faktycznie zobaczył. Przez 10 lat działania sklepu nazbierały się gigabajty plików po produktach dawno usuniętych z oferty. System posprzątał to sam. Klient zmniejszył dysk u dostawcy hostingu — realna oszczędność co miesiąc.
Elastyczność bez migracji. Gdy zmienił się dostawca chmury, nie trzeba było nic przeklejać. Nowy adres — zdjęcia budowały się pod nim automatycznie przy pierwszym wywołaniu.
Czas wdrożenia: 1 tydzień.
Dla kogo to ma sens?
To rozwiązanie sprawdza się gdy:
- masz duży katalog produktów (kilka tysięcy wzwyż)
- rozwijasz sklep na różnych platformach (mobile, PWA, web)
- czas ładowania zdjęć to problem który już zauważają klienci
- płacisz za hosting i chcesz wiedzieć za co płacisz
Masz sklep Magento i zdjęcia ładują się za wolno? Napisz do mnie — powiem Ci czy mogę to naprawić w Twoim przypadku.