Prima pagină șterge hero-ul desenat de server și îl lasă alb ~286 ms
Serverul desenează hero-ul primei pagini în document, dar primul cadru pe care îl comite React îl șterge și îl lasă alb până se descarcă bucata paginii. Munca făcută în #29 (closed) și în restul lucrărilor de primă vopsire se vede, apoi dispare, apoi revine.
Ce se întâmplă
backend/src/services/render-page.ts scrie hero-ul în #root — verificat pe
producție, documentul primei pagini conține <section class="relative w-full">
cu poza și gradientul, în 10.513 octeți.
frontend/src/App.tsx montează însă tot arborele de rute într-un singur
<Suspense fallback={<PageFallback />}> (:119), iar Home e încărcat leneș
(:18). PageFallback (:56) randează <div className="min-h-screen" /> —
gol. Prima randare a lui React înlocuiește deci hero-ul cu un dreptunghi alb și
îl ține așa până se descarcă bucata Home.
Măsurat pe profilul mobil de Lighthouse, cadrul alb ține ~286 ms, cu #root
redus la un singur div gol.
bannerData nu adresează asta și nu putea: datele ajung la componentă, dar
componenta nu există încă.
Cum se rezolvă
Exact ca la pagina de produs în #44 (closed): ruta primeşte limita ei de Suspense, iar
starea de așteptare desenează aceeași deschidere pe care o scrie serverul — aici,
hero-ul construit din primul banner publicat, pe care documentul îl poartă deja
ca date în <script type="application/json" id="hyperice-banners">.
-
Rută proprie pentru prima pagină, cu stare de așteptare în formă de hero -
Starea de așteptare citește bannerele din document, ca ProductOpening -
Test care pică dacă citirea se mută într-un efect ( renderToStaticMarkup) -
Măsurare pe producție: niciun cadru cu #rootgol, CLS sub 0,1
Criteriu de acceptare
Pe producție, pe prima pagină, nicio secvență de cadre în care #root e gol
între desenul serverului și pagina încărcată, iar hero-ul stă la aceeași
poziție în ambele.
Găsit la a doua trecere pe #44 (closed), unde același defect a fost măsurat și reparat pentru pagina de produs. Premisa lucrării #44 (closed) — „prima pagină nu are cadrul gol" — era falsă.