Vizibilitatea meniului într-o singură cerere
Antetul și subsolul întrebau, fiecare pe cont propriu, care intrări de meniu sunt publicate — o cerere per intrare, și încă o rundă după ce se așeza limba. Pe pagina de produs: 78 de cereri către API, majoritatea copii ale unei adrese deja pornite, toate pe aceleași conexiuni pe care le folosește și imaginea principală.
Ce s-a schimbat
GET /api/nav-visibility întoarce dintr-o dată toate slug-urile de colecții publicate și toate handle-urile de produse publicate. Nu primește limbă: published e un singur câmp pe rând, identic în toate cele trei limbi, deci o schimbare de limbă nu mai are ce să reîntrebe — de aici dispar și rundele repetate.
În frontend, o hartă de promisiuni la nivel de modul (frontend/src/lib/catalog.ts): o componentă care se montează mai târziu se atașează la cererea deja pornită, în loc să înceapă alta. Asta rezolvă și citirile duble de /api/products și /api/shop-categories.
Antetul răspunsului e Cache-Control: public, max-age=60 — răspunsul e identic pentru toți vizitatorii.
Măsurat pe build de producție, încărcare completă
| Pagină | Înainte | Acum |
|---|---|---|
/products/hypervolt-3-pro |
78 de cereri, 16 unice | 6 cereri, 0 repetate |
/ |
64 de cereri, 21 unice | 11 cereri, 0 repetate |
Abatere de la issue
Criteriul cerea cel mult 10 cereri pe pagina de start; sunt 11. Cele trei rămase peste prag sunt content-list-uri cerute de trei secțiuni diferite ale paginii, cu chei diferite — nu sunt repetări, ci cereri distincte. Unirea lor cere coordonare între componente și nu ține de meniu.
Verificare
-
backend:npm run build,npm test— 452 de teste trec, inclusiv patru noi întests/nav-visibility.test.ts -
frontend:npm run lint,npm run build,npm test— 196 de teste trec - Filtrarea verificată în browser: cu o colecție trecută pe nepublicat, intrarea ei dispare din antet și din subsol; republicată, revine
Closes #20 (closed)