{"id":90094,"date":"2026-10-14T12:45:00","date_gmt":"2026-10-14T10:45:00","guid":{"rendered":"https:\/\/codescriptum.pl\/blog\/konfigurator-3d-dlugo-sie-laduje\/"},"modified":"2026-10-14T12:45:00","modified_gmt":"2026-10-14T10:45:00","slug":"konfigurator-3d-dlugo-sie-laduje","status":"publish","type":"post","link":"https:\/\/codescriptum.pl\/blog\/konfigurator-3d-dlugo-sie-laduje\/","title":{"rendered":"Konfigurator 3D d\u0142ugo si\u0119 \u0142aduje i psuje wynik PageSpeed - przyczyny i naprawa"},"content":{"rendered":"<p>Konfigurator 3D spowalnia stron\u0119, gdy jego biblioteka, modele i tekstury pobieraj\u0105 si\u0119 razem z reszt\u0105 tre\u015bci, zanim klient w og\u00f3le zdecyduje si\u0119 z niego skorzysta\u0107. Naprawa polega na odwr\u00f3ceniu kolejno\u015bci: najpierw lekka strona z obrazem podgl\u0105du produktu, a konfigurator dopiero po klikni\u0119ciu albo wtedy, gdy pojawi si\u0119 na ekranie.<\/p>\n<h2>Po czym pozna\u0107, \u017ce to konfigurator spowalnia stron\u0119?<\/h2>\n<p>Po tym, \u017ce s\u0142abe wyniki dotycz\u0105 tylko stron z konfiguratorem, a w PageSpeed Insights w\u015br\u00f3d najwi\u0119kszych pobieranych plik\u00f3w s\u0105 biblioteka 3D, pliki modeli i tekstury. Wtedy og\u00f3lne przyspieszanie strony niewiele da.<\/p>\n<ul>\n<li>przez kilka sekund wida\u0107 pusty prostok\u0105t, kr\u0119c\u0105cy si\u0119 wska\u017anik albo pasek post\u0119pu w miejscu modelu,<\/li>\n<li>PageSpeed Insights dla telefonu pokazuje s\u0142abe LCP i d\u0142ugi czas blokowania, a w diagnostyce dominuj\u0105 pliki JavaScript, GLB i du\u017ce obrazy tekstur,<\/li>\n<li>pierwsze dotkni\u0119cie menu albo przycisku reaguje z op\u00f3\u017anieniem,<\/li>\n<li>podstrony bez konfiguratora w tej samej witrynie maj\u0105 dobre wyniki.<\/li>\n<\/ul>\n<p>Je\u015bli wolne s\u0105 wszystkie podstrony, przyczyna le\u017cy gdzie indziej: w zdj\u0119ciach, wtyczkach albo hostingu. Og\u00f3lne przyczyny i ich napraw\u0119 opisujemy we wpisie <a href=\"\/blog\/strona-internetowa-wolno-sie-laduje\/\">strona internetowa wolno si\u0119 \u0142aduje<\/a>.<\/p>\n<h2>Dlaczego konfigurator 3D psuje wynik PageSpeed?<\/h2>\n<p>Bo przegl\u0105darka musi pobra\u0107 i uruchomi\u0107 kilka ci\u0119\u017ckich rzeczy naraz: bibliotek\u0119 3D, model, tekstury i kod konfiguratora, a telefon robi to wolniej ni\u017c komputer stacjonarny. Do tego konfigurator zwykle stoi w najbardziej wra\u017cliwym miejscu strony, czyli na samej g\u00f3rze.<\/p>\n<h3>Wszystko \u0142aduje si\u0119 razem ze stron\u0105<\/h3>\n<p>Skrypt konfiguratora jest do\u0142\u0105czony do strony jak ka\u017cdy inny i startuje od razu, wi\u0119c pobiera model i wszystkie warianty kolor\u00f3w oraz dodatk\u00f3w, tak\u017ce te, kt\u00f3rych klient nigdy nie wybierze. P\u0142ac\u0105 za to r\u00f3wnie\u017c osoby, kt\u00f3re przysz\u0142y tylko przeczyta\u0107 opis i sprawdzi\u0107 cen\u0119. Dzieje si\u0119 tak nawet wtedy, gdy konfigurator jest kilka ekran\u00f3w ni\u017cej, bo skrypt startuje niezale\u017cnie od tego, czy klient do niego dotrze.<\/p>\n<h3>Za du\u017ce modele i tekstury<\/h3>\n<p>Nieskompresowany model i tekstury w wysokiej rozdzielczo\u015bci potrafi\u0105 wa\u017cy\u0107 wi\u0119cej ni\u017c ca\u0142a reszta strony. Tekstury zapisane jako JPG lub PNG trzeba jeszcze rozpakowa\u0107 w pami\u0119ci karty graficznej, co na telefonie trwa i zajmuje pami\u0119\u0107. Jak przygotowa\u0107 l\u017cejszy model, opisujemy we wpisie <a href=\"\/blog\/model-3d-z-cad-za-ciezki-do-przegladarki\/\">model 3D z CAD za ci\u0119\u017cki do przegl\u0105darki<\/a>.<\/p>\n<h3>Brak obrazu podgl\u0105du i konfigurator w pierwszym ekranie<\/h3>\n<p>Element canvas, na kt\u00f3rym rysuje si\u0119 model 3D, nie jest brany pod uwag\u0119 przy liczeniu LCP. Je\u015bli pierwszy ekran zajmuje sam konfigurator, wynik zale\u017cy od innego elementu, np. nag\u0142\u00f3wka, a jego wy\u015bwietlenie op\u00f3\u017aniaj\u0105 skrypty 3D, kt\u00f3re konkuruj\u0105 o \u0142\u0105cze i procesor. Klient widzi wtedy pusty prostok\u0105t zamiast produktu, cho\u0107 m\u00f3g\u0142by od razu zobaczy\u0107 jego zdj\u0119cie.<\/p>\n<h3>Ci\u0119\u017cki kod uruchamiany przy starcie<\/h3>\n<p>Rozpakowanie modelu i przygotowanie sceny zajmuj\u0105 procesor telefonu. Je\u015bli dzieje si\u0119 to zaraz po wej\u015bciu na stron\u0119, pierwsze klikni\u0119cia w menu czy przyciski reaguj\u0105 z op\u00f3\u017anieniem, co pogarsza INP i wra\u017cenie, \u017ce strona dzia\u0142a sprawnie.<\/p>\n<h2>Jak przyspieszy\u0107 stron\u0119 z konfiguratorem 3D?<\/h2>\n<p>Poka\u017c w pierwszym ekranie lekki obraz podgl\u0105du, kt\u00f3ry stanie si\u0119 elementem LCP, a konfigurator \u0142aduj dopiero wtedy, gdy klient go potrzebuje. Reszt\u0119 zysku daj\u0105 skompresowane pliki i dobre ustawienia pami\u0119ci podr\u0119cznej. Kolejno\u015b\u0107 zmian ma znaczenie: najpierw obraz podgl\u0105du i \u0142adowanie na klikni\u0119cie, bo poprawiaj\u0105 wynik dla wszystkich odwiedzaj\u0105cych, a dopiero potem kompresja, kt\u00f3ra skraca czekanie tych, kt\u00f3rzy konfigurator uruchomi\u0105.<\/p>\n<table>\n<thead>\n<tr>\n<th>Przyczyna<\/th>\n<th>Naprawa<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Brak podgl\u0105du w pierwszym ekranie<\/td>\n<td>Obraz produktu w WebP lub AVIF z podanymi wymiarami, bez leniwego \u0142adowania, z atrybutem fetchpriority=\"high\"<\/td>\n<\/tr>\n<tr>\n<td>Konfigurator \u0142aduje si\u0119 ze stron\u0105<\/td>\n<td>Biblioteka i model pobierane po klikni\u0119ciu \u201eSkonfiguruj\u201d albo gdy sekcja zbli\u017ca si\u0119 do ekranu<\/td>\n<\/tr>\n<tr>\n<td>Ci\u0119\u017cki model<\/td>\n<td>GLB z kompresj\u0105 Draco lub Meshopt, bez niewidocznych cz\u0119\u015bci<\/td>\n<\/tr>\n<tr>\n<td>Wszystkie warianty na starcie<\/td>\n<td>Domy\u015blna konfiguracja na start, kolory i dodatki przy pierwszym wyborze<\/td>\n<\/tr>\n<tr>\n<td>Du\u017ce tekstury<\/td>\n<td>KTX2 w umiarkowanej rozdzielczo\u015bci, mniejsze wersje dla telefon\u00f3w<\/td>\n<\/tr>\n<tr>\n<td>Pliki pobierane przy ka\u017cdej wizycie<\/td>\n<td>Nazwy plik\u00f3w z numerem wersji i nag\u0142\u00f3wek Cache-Control z d\u0142ugim czasem przechowywania<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Podczas \u0142adowania po klikni\u0119ciu pokazuj post\u0119p na tle obrazu podgl\u0105du, a nie pusty prostok\u0105t. Klient widzi wtedy produkt przez ca\u0142y czas, a konfigurator p\u0142ynnie zast\u0119puje zdj\u0119cie, gdy jest gotowy. T\u0119 sam\u0105 zasad\u0119 warto zastosowa\u0107 do zmian w trakcie konfiguracji: tekstura nowego koloru albo model bramy pobieraj\u0105 si\u0119 dopiero przy pierwszym wyborze, a kolejne zmiany korzystaj\u0105 ju\u017c z plik\u00f3w w pami\u0119ci.<\/p>\n<h3>Jak sprawdzi\u0107, co dok\u0142adnie pobiera si\u0119 przed klikni\u0119ciem?<\/h3>\n<p>Otw\u00f3rz stron\u0119 w Chrome, w narz\u0119dziach przegl\u0105darki przejd\u017a do karty Sie\u0107, w\u0142\u0105cz ograniczenie pr\u0119dko\u015bci do wolnego \u0142\u0105cza mobilnego i prze\u0142aduj stron\u0119 bez pami\u0119ci podr\u0119cznej. Posortuj pliki wed\u0142ug rozmiaru: na g\u00f3rze zobaczysz bibliotek\u0119 3D, pliki GLB, tekstury i dekodery kompresji. Ka\u017cdy z nich, kt\u00f3ry pobiera si\u0119, zanim klient kliknie konfigurator, mo\u017cna przenie\u015b\u0107 na p\u00f3\u017aniej. Ten sam test po zmianach poka\u017ce, czy przed klikni\u0119ciem strona pobiera ju\u017c tylko obraz podgl\u0105du i w\u0142asne skrypty.<\/p>\n<h3>Iframe czy osadzenie bezpo\u015brednio na stronie?<\/h3>\n<p>Oba sposoby mog\u0105 by\u0107 szybkie, je\u015bli konfigurator nie startuje razem ze stron\u0105. Iframe z atrybutem loading=\"lazy\" sam odk\u0142ada pobieranie do momentu przewini\u0119cia, ale utrudnia dopasowanie wysoko\u015bci i pomiar zdarze\u0144. Osadzenie bezpo\u015brednio na stronie daje wi\u0119cej kontroli: obraz podgl\u0105du, \u0142adowanie po klikni\u0119ciu i wsp\u00f3lny formularz zapytania w jednym miejscu.<\/p>\n<p>Przy gara\u017cach i wiatach dobrze sprawdza si\u0119 uk\u0142ad, w kt\u00f3rym na g\u00f3rze strony jest zdj\u0119cie albo render najpopularniejszego wariantu z cen\u0105 \u201eod\u201d i przyciskiem \u201eSkonfiguruj sw\u00f3j gara\u017c\u201d, a konfigurator otwiera si\u0119 po klikni\u0119ciu. Taki uk\u0142ad proponujemy przy wdro\u017ceniach opisanych na stronie <a href=\"https:\/\/codescriptum.pl\/konfigurator-3d-garazy\/\">konfiguratora 3D gara\u017cy<\/a>.<\/p>\n<h2>Co sprawdzi\u0107 przed publikacj\u0105? Lista kontrolna<\/h2>\n<ul>\n<li>w pierwszym ekranie jest obraz podgl\u0105du z podanymi wymiarami, a nie pusty canvas,<\/li>\n<li>\u017caden plik 3D nie pobiera si\u0119, dop\u00f3ki klient nie kliknie albo nie przewinie do konfiguratora,<\/li>\n<li>model jest w formacie GLB z kompresj\u0105, a tekstury w KTX2,<\/li>\n<li>pliki 3D maj\u0105 w nazwie numer wersji i d\u0142ugi czas przechowywania w cache,<\/li>\n<li>podczas \u0142adowania klient widzi post\u0119p na tle podgl\u0105du,<\/li>\n<li>wynik sprawdzono w PageSpeed Insights dla telefonu i na prawdziwym telefonie.<\/li>\n<\/ul>\n<div class=\"csb-note csb-note--warn\">\n<p>Nie ustawiaj leniwego \u0142adowania na obrazie podgl\u0105du w pierwszym ekranie. To on ma by\u0107 elementem LCP, wi\u0119c powinien pobra\u0107 si\u0119 jak najwcze\u015bniej. Leniwie \u0142aduj dopiero to, co jest ni\u017cej na stronie, oraz sam konfigurator.<\/p>\n<\/div>\n<p>\u0141adowanie na klikni\u0119cie za obrazem podgl\u0105du to standard ka\u017cdego <a href=\"https:\/\/codescriptum.pl\/konfigurator-3d\/\">konfiguratora 3D na stron\u0119<\/a>, kt\u00f3ry budujemy w three.js. Ten problem jest jednym z naszej listy <a href=\"\/blog\/50-problemow-z-konfiguratorem-3d\/\">50 problem\u00f3w z konfiguratorem 3D produktu<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Konfigurator 3D spowalnia stron\u0119, gdy jego biblioteka, modele i tekstury pobieraj\u0105 si\u0119 razem z reszt\u0105 tre\u015bci, zanim klient w og\u00f3le zdecyduje si\u0119 z niego skorzysta\u0107. Naprawa polega na odwr\u00f3ceniu kolejno\u015bci:\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[102],"tags":[],"class_list":["post-90094","post","type-post","status-publish","format-standard","hentry","category-konfiguratory-3d"],"_links":{"self":[{"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/posts\/90094","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/comments?post=90094"}],"version-history":[{"count":0,"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/posts\/90094\/revisions"}],"wp:attachment":[{"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/media?parent=90094"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/categories?post=90094"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/tags?post=90094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}