Czym jest LCP i dlaczego wpływa na odbiór strony
Najlepsze usprawnienia LCP nie polegają na „oszukiwaniu” narzędzi, tylko na skróceniu drogi do pierwszego sensownego widoku strony. To ważne rozróżnienie, bo łatwo poprawić metrykę kosztem doświadczenia użytkownika: ukryć treść, zastąpić ją atrapą albo przeorganizować layout w sposób, który wygląda szybciej w raportach, ale gorzej w praktyce.
Jeśli celem jest jednocześnie lepszy wynik i lepszy UX, warto trzymać się trzech zasad:
- nie ukrywaj realnej treści tylko po to, by opóźnić pomiar,
- nie przesuwaj kluczowych elementów po załadowaniu strony,
- upraszczaj koszt renderowania, a nie użyteczność i czytelność.
W praktyce oznacza to współpracę designu i developmentu już na etapie projektu. Często wystarczy zmniejszyć wagę dekoracji, ograniczyć liczbę warstw w hero, uprościć animacje, podać lepsze wymiary obrazów i zadbać o priorytety ładowania. Dzięki temu strona wygląda prawie tak samo, ale szybciej pokazuje to, na czym użytkownikowi naprawdę zależy.
Warto też pamiętać, że nie każda „ciężka” sekcja jest problemem. Jeśli duży element nie blokuje pierwszego renderu i nie wypiera najważniejszej treści, może pozostać częścią projektu. Optymalizacja LCP nie polega na usuwaniu wszystkiego, tylko na eliminowaniu zbędnych opóźnień.
Przed wdrożeniem zmian dobrze zrobić prostą checklistę:
- czy element LCP jest faktycznie najważniejszy na pierwszym ekranie,
- czy jego zasoby są ładowane z odpowiednim priorytetem,
- czy po optymalizacji nie pojawi się CLS,
- czy strona pozostaje czytelna na mobile,
- czy zmiana poprawia realne doświadczenie, a nie tylko wynik w narzędziu.
Najlepszy efekt zwykle daje podejście iteracyjne: najpierw mierzenie na realnych urządzeniach, potem małe zmiany, a na końcu porównanie przed i po. Takie podejście pozwala poprawić LCP bez utraty charakteru strony i bez wprowadzania „fałszywej szybkości”.
Co najczęściej spowalnia LCP na stronach internetowych
Najczęstsze przyczyny wolnego LCP zwykle nie wynikają z jednego błędu, tylko z kilku opóźnień, które nakładają się na siebie. Strona może mieć dobry projekt, a mimo to długo pokazywać najważniejszy element, jeśli po drodze blokują ją ciężkie zasoby, wolny serwer albo zbyt późno priorytetyzowane treści.
Do najczęstszych winowajców należą:
- ciężkie obrazy hero — zbyt duże pliki, nieoptymalny format, brak responsywnych wariantów,
- rozbudowany CSS — duże arkusze stylów i stylowanie, które blokuje pierwszy render,
- JavaScript blokujący render — skrypty uruchamiane zbyt wcześnie, hydratacja, biblioteki i third-party,
- późno ładowane fonty — tekst czeka na właściwy krój zamiast pojawić się od razu,
- wolna odpowiedź serwera — wysoki TTFB, brak cache, opóźnienia backendu,
- zbyt wiele requestów — każdy dodatkowy zasób wydłuża drogę do widocznej treści,
- elementy ładowane po krytycznej ścieżce — np. sekcje, które powinny być widoczne od początku, ale są odkładane na później.
Szczególnie często problemy sprawiają rozwiązania projektowe, które wyglądają efektownie, ale są kosztowne w renderowaniu. Przykłady to:
- slider w górnej części strony,
- hero z wieloma warstwami i animacjami,
- tła o pełnej rozdzielczości,
- komponenty zależne od danych z API, które muszą czekać na odpowiedź,
- duże ilości dekoracji i efektów wizualnych, które nie wspierają treści.
Warto pamiętać, że sama „ciężkość” layoutu nie zawsze jest problemem. Jeśli strona ma bogaty układ, ale kluczowa treść pojawia się szybko i bez blokad, nie musi to oznaczać złego LCP. Problem zaczyna się wtedy, gdy ciężar projektu opóźnia pierwszy sensowny widok dla użytkownika.
Najprościej myśleć o tym tak: LCP spowalnia wszystko, co oddala moment pokazania najważniejszego elementu na ekranie. Im więcej zasobów musi się pobrać, przeliczyć i wyrenderować zanim użytkownik zobaczy istotną treść, tym gorszy będzie wynik.
Jak diagnozować LCP bez zgadywania
Żeby poprawić Largest Contentful Paint bez przypadkowych zmian, najpierw trzeba ustalić, co dokładnie jest elementem LCP i dlaczego pojawia się za późno. Sama wartość metryki niewiele mówi, jeśli nie wiemy, czy opóźnia ją serwer, obraz, CSS, JavaScript czy blokada renderowania na poziomie przeglądarki.
Do diagnostyki najlepiej podejść warstwowo:
- PageSpeed Insights i Lighthouse pokażą główne problemy oraz wskażą element uznany za LCP,
- Chrome DevTools pozwoli przeanalizować waterfall i zobaczyć kolejność pobierania zasobów,
- Web Vitals w narzędziach deweloperskich ułatwią sprawdzenie, kiedy dokładnie następuje wyrenderowanie największego elementu,
- RUM pokaże, jak strona zachowuje się u prawdziwych użytkowników, a nie tylko w laboratoryjnym teście,
- Search Console pomoże wyłapać szerszy wzorzec problemu na większej liczbie podstron.
Najważniejsze pytanie brzmi: co jest wąskim gardłem? Zwykle jedna z czterech rzeczy:
- czas odpowiedzi serwera — strona zaczyna się renderować za późno,
- czas pobrania zasobu — duży obraz, font albo plik CSS dociera zbyt wolno,
- opóźnienie renderowania — przeglądarka ma już dane, ale jeszcze nie może ich pokazać,
- blokada przez skrypty — JavaScript spowalnia pokazanie treści albo wymusza dodatkową hydratację.
Praktycznie warto sprawdzić też, czy problem jest techniczny, czy projektowy. Techniczny to na przykład zbyt wolny backend, brak cache albo zbyt ciężki bundle. Projektowy to na przykład hero z wieloma warstwami, slider na górze strony albo duży komponent, który wymaga danych z API, zanim pokaże cokolwiek sensownego.
Podczas analizy trzeba pamiętać o kontekście urządzeń mobilnych. To, co na szybkim komputerze wygląda „w porządku”, na słabszym telefonie i wolniejszej sieci może okazać się dużym opóźnieniem. Dlatego najlepiej sprawdzać LCP na różnych profilach łącza i CPU, zamiast ufać wyłącznie jednemu pomiarowi.
Pomocna jest prosta interpretacja waterfall:
- jeśli pierwszy byte przychodzi późno, szukaj problemu po stronie serwera,
- jeśli zasób LCP jest pobierany z opóźnieniem, problemem może być priorytet ładowania,
- jeśli zasób jest już na miejscu, ale element nadal się nie pojawia, winny bywa CSS lub JavaScript,
- jeśli wszystko działa poprawnie w labie, a źle w realu, sprawdź dane RUM i zachowanie na słabszych urządzeniach.
Najlepszy efekt daje podejście: zmierz, zlokalizuj, popraw, porównaj. Dzięki temu nie naprawiasz na ślepo i nie ryzykujesz zmian, które poprawią wynik w narzędziu, ale pogorszą doświadczenie użytkownika.
Optymalizacja obrazów hero i dużych elementów bez psucia wyglądu
Największy widoczny element strony bardzo często decyduje o wyniku LCP, dlatego obraz hero, banner albo główny blok wizualny trzeba traktować jak zasób krytyczny. Dobra wiadomość jest taka, że w większości przypadków można go przyspieszyć bez zmiany projektu i bez obniżania jakości odbioru.
Kluczem jest dopasowanie rozmiaru, formatu i priorytetu ładowania do realnego miejsca wyświetlania. Zbyt duży plik nie wygląda lepiej tylko dlatego, że ma więcej pikseli — zwykle jedynie opóźnia pierwszy render.
- Kompresuj obrazy bez widocznej utraty jakości.
- Używaj nowoczesnych formatów, takich jak WebP lub AVIF, jeśli są wspierane w danym kontekście.
- Dobieraj wymiary do layoutu, zamiast wysyłać pełnowymiarowy plik dla małego obszaru na ekranie.
- Stosuj srcset i sizes, aby przeglądarka pobrała wariant odpowiedni dla urządzenia.
- Preloaduj tylko naprawdę krytyczny obraz, jeśli jest to główny element pierwszego ekranu.
W przypadku hero ważne jest też kadrowanie. Lepiej przyciąć obraz tak, by najważniejszy motyw był dobrze widoczny w docelowym układzie, niż zostawiać ogromny plik tylko po to, by później skalować go w CSS. Takie podejście przyspiesza ładowanie i zwykle poprawia czytelność kompozycji.
Jeśli potrzebujesz stanu przejściowego, możesz zastosować blur-up albo lekki placeholder, ale wyłącznie jako krótkie rozwiązanie tymczasowe. Nie powinien on zastępować właściwej grafiki ani tworzyć wrażenia, że treść jest gotowa, gdy faktycznie jeszcze się nie załadowała.
Szczególną ostrożność zachowaj przy obrazach ustawianych jako tło w CSS. Często ładują się one mniej przewidywalnie niż zwykły element <img>, a przez to trudniej nadać im priorytet. Jeśli to możliwe, obraz krytyczny lepiej umieścić w HTML, gdzie łatwiej sterować jego pobieraniem.
Lazy loadingu nie stosuj do elementu LCP. Jeśli największy element ma pojawić się od razu, odkładanie jego pobrania działa przeciwko głównemu celowi. Lazy loading zostaw dla treści poniżej pierwszego ekranu.
W praktyce najlepszy efekt daje połączenie trzech działań: mniejszy i lepiej dobrany plik, odpowiedni priorytet pobierania oraz brak wizualnych sztuczek, które udają szybkość kosztem rzeczywistego czasu wyświetlenia treści.
CSS i układ strony: jak przyspieszyć render bez przesuwania treści
W przypadku LCP CSS bywa niewidocznym hamulcem: strona jest już pobrana, ale przeglądarka nadal czeka na style, które pozwolą jej poprawnie wyrenderować pierwszy ekran. Dlatego optymalizacja arkuszy stylów powinna skupiać się nie tylko na samym wyniku w narzędziu, lecz także na tym, czy układ pozostaje stabilny i czy użytkownik od razu widzi czytelną treść.
Najważniejsza zasada jest prosta: im mniej CSS blokuje pierwszy render, tym szybciej pojawia się kluczowy element strony. W praktyce warto zadbać o kilka rzeczy jednocześnie:
- ograniczyć krytyczny CSS do stylów potrzebnych na pierwszy ekran,
- usuwać nieużywane reguły, które tylko zwiększają rozmiar arkuszy,
- unikać nadmiaru importów i wielopoziomowego łańcucha plików CSS,
- nie przenosić ciężaru na dodatkowe warstwy, jeśli nie są potrzebne wizualnie.
Duże znaczenie mają też stabilne wymiary elementów. Jeśli podczas przyspieszania renderu zmienisz wysokość, szerokość albo zachowanie kontenera hero, łatwo doprowadzić do przesunięć treści i pogorszyć CLS. Dobrze przygotowany layout powinien mieć z góry zarezerwowane miejsce na obraz, nagłówek, CTA i inne kluczowe komponenty, dzięki czemu strona może ładować się szybciej bez skakania układu.
W praktyce często nie trzeba przebudowywać całej sekcji. Lepiej uprościć jej koszt niż zmieniać jej strukturę. Na przykład:
- zamiast wielu cieni i filtrów zastosować lżejszy efekt wizualny,
- zamiast kilku warstw tła zostawić jedną dobrze dopasowaną kompozycję,
- zamiast rozbudowanego komponentu hero ograniczyć dekoracje do tych, które faktycznie wspierają przekaz,
- zamiast ciężkich frameworkowych stylów wyciąć to, co nie jest używane na pierwszym ekranie.
Ważną rolę odgrywają też fonty. Źle ustawione fonty potrafią opóźnić moment, w którym treść staje się czytelna. Pomagają tu trzy działania: font-display ustawiony tak, by tekst nie czekał bez końca, preload najważniejszych krojów oraz ograniczenie liczby wariantów, które mają się pojawić od razu. Trzeba przy tym uważać, aby nie wywołać niepotrzebnych przesunięć i nie pogorszyć wrażenia wizualnego po załadowaniu kroju docelowego.
Frameworki komponentowe i rozbudowane systemy projektowe też mogą zwiększać koszt CSS. Nie oznacza to, że trzeba z nich rezygnować, ale warto kontrolować, ile stylów trafia na stronę startową. Najlepiej projektować tak, by komponenty hero, nawigacja i pierwsza sekcja nie dźwigały całej biblioteki stylów całego produktu.
Dobry kompromis między wydajnością a UX polega na tym, by przyspieszać to, co widzi użytkownik, bez poświęcania hierarchii informacji. Jeśli uproszczenie stylów sprawia, że nagłówek, opis i przycisk CTA pojawiają się szybciej, a strona nadal wygląda spójnie, to jest to właściwy kierunek. Jeśli jednak optymalizacja wymaga ukrycia treści, sztucznego ładowania zastępczego albo zmian, które pogarszają czytelność, lepiej szukać innego rozwiązania.
Przed wdrożeniem zmian warto sprawdzić:
- czy dany arkusz CSS jest potrzebny na pierwszym ekranie,
- czy usunięcie reguł nie spowoduje przesunięć układu,
- czy fonty nie opóźniają czytelności tekstu,
- czy sekcja hero nadal wygląda spójnie na mobile,
- czy zmiana poprawia realny czas wyświetlenia treści, a nie tylko wynik audytu.
Najlepsze efekty daje podejście iteracyjne: najpierw ograniczenie blokad renderowania, potem kontrola stabilności layoutu, a na końcu test na rzeczywistych urządzeniach. Wtedy LCP poprawia się bez ryzyka, że przyspieszenie strony odbije się na komforcie użytkownika.
JavaScript, który opóźnia wyświetlenie kluczowej treści
JavaScript potrafi być jednym z największych hamulców LCP, nawet jeśli sama strona wygląda na lekko zbudowaną. Problem pojawia się wtedy, gdy przeglądarka musi najpierw pobrać, sparować i wykonać skrypty, a dopiero potem może pokazać najważniejszą treść na pierwszym ekranie. Im więcej logiki dzieje się przed renderem, tym dłużej użytkownik czeka na widoczny efekt.
Najczęściej opóźniają LCP:
- ciężkie bundla z dużą liczbą bibliotek,
- hydratacja rozbudowanych komponentów,
- skrypty third-party do analityki, reklam, czatów i trackerów,
- widgety i moduły ładowane zaraz po starcie,
- komponenty zależne od danych, które czekają na odpowiedź API zanim pokażą treść.
W praktyce warto rozróżnić trzy modele renderowania. Statyczny HTML pokazuje treść najszybciej, bo przeglądarka ma gotowy dokument niemal od razu. Server-side rendering zwykle też pomaga, ponieważ użytkownik szybciej widzi gotowy układ, a JavaScript dogrywa interakcje później. Z kolei SPA często mają trudniej z LCP, bo zanim pokażą cokolwiek sensownego, muszą pobrać sporo kodu i uruchomić logikę aplikacji.
Nie oznacza to, że nowoczesne aplikacje muszą być wolne. Trzeba tylko rozsądnie ustawić priorytety:
- używaj defer lub async tam, gdzie to możliwe,
- dziel kod na mniejsze części, zamiast ładować wszystko naraz,
- usuń zbędne biblioteki z krytycznej ścieżki,
- odraczaj widgety reklamowe i marketingowe, jeśli nie są potrzebne do pierwszego ekranu,
- ogranicz skrypty, które nie wpływają na widok początkowy.
Dobrym nawykiem jest też sprawdzenie, czy dana funkcja naprawdę musi działać przed pokazaniem treści. Często analytics, konfiguratory, mapy, popupy czy moduły rekomendacji można uruchomić po pierwszym renderze bez żadnej szkody dla UX. Użytkownik najpierw chce zobaczyć stronę, a dopiero potem wejść w dodatkowe interakcje.
Warto uważać na fałszywe „usprawnienia”, które poprawiają wynik w narzędziu kosztem doświadczenia. Przykładem może być ukrywanie treści, zastępowanie jej atrapą albo opóźnianie pokazania ważnego elementu tylko po to, by test wyglądał lepiej. Takie podejście może pogorszyć zaufanie użytkownika i utrudnić korzystanie ze strony, mimo że liczba w raporcie chwilowo wygląda lepiej.
Jeśli chcesz poprawić LCP bez psucia UX, celuj w prostą zasadę: najpierw pokaż to, co najważniejsze, a dopiero potem uruchamiaj cięższą logikę. Dzięki temu strona wydaje się szybsza, zachowuje pełną funkcjonalność i nie wymaga wizualnych kompromisów.
Serwer, cache i infrastruktura jako cichy winowajca LCP
Jeśli obraz, CSS i JavaScript są już względnie dopracowane, a LCP nadal wypada słabo, bardzo często problem leży niżej: w serwerze, cache albo całej ścieżce dostarczenia treści. To właśnie tutaj strona może stracić cenne setki milisekund zanim w ogóle zacznie renderować pierwszy sensowny widok.
Najważniejszym sygnałem do sprawdzenia jest TTFB, czyli czas do pierwszego bajtu. Gdy jest wysoki, przeglądarka długo czeka na odpowiedź i cały dalszy proces przesuwa się w czasie. W praktyce warto odróżnić dwie sytuacje:
- problem backendowy — serwer generuje stronę zbyt długo, dusi się baza, API odpowiada wolno albo brakuje cache,
- problem frontendowy — HTML dociera szybko, ale dalsze zasoby blokują render lub opóźniają pokazanie elementu LCP.
To rozróżnienie jest kluczowe, bo inaczej naprawia się backend, a inaczej front. Jeśli serwer odpowiada wolno, same zmiany w CSS czy obrazach nie wystarczą. Jeśli natomiast odpowiedź przychodzi szybko, ale LCP nadal się ślimaczy, trzeba szukać blokad po stronie przeglądarki i zasobów krytycznych.
W poprawie LCP bardzo pomagają rozwiązania infrastrukturalne:
- CDN skraca drogę do użytkownika i zmniejsza opóźnienia sieciowe,
- cache przeglądarki ogranicza potrzebę ponownego pobierania tych samych zasobów,
- cache serwerowy przyspiesza generowanie powtarzalnych stron,
- edge caching pozwala serwować treści bliżej użytkownika,
- wstępne generowanie stron lub statyczny rendering zmniejszają koszt przygotowania HTML.
Warto też zwrócić uwagę na szczegóły techniczne, które często robią dużą różnicę przy niewielkim wysiłku:
- kompresja odpowiedzi HTTP,
- poprawne nagłówki cache,
- HTTP/2 lub HTTP/3, jeśli infrastruktura to wspiera,
- ograniczenie liczby wolnych zapytań do API,
- redukcja zależności od zewnętrznych usług potrzebnych do pierwszego renderu.
To właśnie tutaj często ukrywa się największa oszczędność czasu. Nawet dobrze zoptymalizowany obraz hero nie uratuje strony, jeśli HTML przychodzi za późno. Z drugiej strony szybki serwer nie naprawi źle zaprojektowanej sekcji głównej, ale może znacząco skrócić drogę do jej wyświetlenia.
Dobrą praktyką jest analizowanie całego łańcucha: od żądania użytkownika, przez odpowiedź serwera, aż po moment wyświetlenia pierwszego elementu. Jeśli każdy etap ma niewielkie opóźnienie, suma potrafi być bardzo odczuwalna. Dlatego optymalizacja infrastruktury często daje efekt nie tylko w metrykach, ale też w subiektywnym poczuciu szybkości strony.
Najlepsze rezultaty osiąga się wtedy, gdy backend, cache i frontend są projektowane razem. Strona szybka technicznie, ale chaotyczna w dostarczaniu treści, nadal będzie sprawiała wrażenie ciężkiej. Z kolei dobrze zorganizowana infrastruktura potrafi sprawić, że nawet rozbudowany serwis zaczyna działać znacznie sprawniej bez zmiany układu i bez pogorszenia UX.
Jak poprawiać LCP, nie psując UX i projektu wizualnego
Poprawa LCP nie powinna polegać na tym, że strona wygląda szybciej kosztem realnego komfortu użytkownika. Znacznie lepszym podejściem jest przyspieszenie momentu, w którym pojawia się najważniejsza treść, przy jednoczesnym zachowaniu hierarchii informacji, czytelności i spójnego projektu wizualnego.
W praktyce warto trzymać się kilku zasad projektowych:
- nie ukrywaj treści tylko po to, by poprawić wynik w narzędziu,
- nie zastępuj realnego contentu atrapami, które udają gotowość strony,
- nie przesuwaj kluczowych elementów po załadowaniu,
- nie pogarszaj dostępności dla użytkowników mobilnych i korzystających z technologii wspomagających.
Najlepsze efekty daje współpraca designu i developmentu już na etapie projektu. Jeśli zespół wspólnie ustali, które elementy są krytyczne dla pierwszego ekranu, łatwiej przygotować lżejszą wersję tej samej sekcji bez rozbijania układu. Często nie trzeba przebudowywać hero od zera — wystarczy zmniejszyć liczbę dekoracji, ograniczyć ciężkie animacje, uprościć cienie albo wcześniej pobrać obraz, który naprawdę buduje pierwszy widok.
Dobrym kompromisem są zmiany, które obniżają koszt renderowania, ale nie zmieniają przekazu. Przykłady to:
- uprościenie efektów wizualnych zamiast ich całkowitego usuwania,
- redukcja liczby warstw w sekcji hero,
- wcześniejsze ładowanie kluczowego obrazu,
- odchudzenie stylów i skryptów tylko dla pierwszego ekranu,
- rezygnacja z ozdobników, które nie wspierają celu strony.
Warto natomiast unikać rozwiązań pozornych, takich jak sztuczne opóźnianie treści, „fake loading” czy układanie strony tak, by tylko raport wyglądał lepiej. Takie praktyki mogą pogorszyć zaufanie użytkownika, utrudnić korzystanie ze strony i wprowadzić niepotrzebny chaos w odbiorze.
Przed wdrożeniem zmian dobrze zrobić krótką checklistę:
- czy proponowana optymalizacja nie zmienia hierarchii treści,
- czy nie zwiększa ryzyka CLS lub przesunięć układu,
- czy nadal dobrze działa na mobile,
- czy nie obniża czytelności CTA i nagłówków,
- czy poprawa jest widoczna także na realnych urządzeniach, a nie tylko w laboratorium.
Najbezpieczniej testować zmiany iteracyjnie: najpierw wdrożyć jedną poprawkę, potem porównać wynik przed i po na prawdziwych urządzeniach, a dopiero później iść dalej. Dzięki temu łatwiej znaleźć punkt równowagi między szybkością a jakością doświadczenia.
Jeśli celem jest dobra wydajność bez kompromisów UX, trzeba myśleć nie o „odchudzaniu strony za wszelką cenę”, ale o usuwaniu tego, co opóźnia pokazanie najważniejszej treści. To właśnie takie podejście daje realną poprawę LCP i jednocześnie chroni charakter projektu.
FAQ
Co jest najczęściej największym problemem przy LCP?
Najczęściej spowalniają go ciężkie obrazy hero, blokujący CSS, zbyt duży JavaScript oraz wolna odpowiedź serwera. W wielu przypadkach kilka tych czynników działa jednocześnie.
Czy można poprawić LCP bez zmiany wyglądu strony?
Tak, bardzo często. Wystarczy zoptymalizować rozmiary i formaty zasobów, skrócić ścieżkę renderowania, odłożyć niepotrzebne skrypty i usprawnić serwer, nie zmieniając układu strony.
Czy lazy loading pomaga na LCP?
Dla elementu LCP zwykle nie. Jeśli największy element jest ładowany lazy, może pojawić się później, więc warto wykluczyć go z lazy loadingu i zadbać o priorytet pobierania.
Jak sprawdzić, który element jest LCP?
Najprościej w Lighthouse, PageSpeed Insights lub DevTools. Narzędzia wskażą konkretny element, który został uznany za LCP, oraz podpowiedzą, co go opóźnia.
Czy preload zawsze poprawia LCP?
Nie zawsze. Pomaga przede wszystkim wtedy, gdy zasób jest naprawdę krytyczny i wcześniej nie był pobierany. Źle użyty preload może nie przynieść efektu albo obciążyć stronę nadmiarowymi requestami.
Sprawdź swoją stronę pod kątem LCP i porównaj, który element naprawdę spowalnia pierwszy widoczny render — potem wdrażaj zmiany tak, aby przyspieszyć ładowanie bez utraty jakości UX.


