56 lines
2.9 KiB
Markdown
56 lines
2.9 KiB
Markdown
# F-132 — Frontend home DYNAMIC_SERVER_USAGE
|
|
|
|
## Diagnóstico
|
|
|
|
Build del frontend (Turbopack) emitía dos `DYNAMIC_SERVER_USAGE` para `/`:
|
|
|
|
```
|
|
Route / couldn't be rendered statically because it used revalidate: 0 fetch
|
|
http://192.168.18.93:3000/products/search?limit=8
|
|
|
|
Route / couldn't be rendered statically because it used no-store fetch
|
|
http://192.168.18.93:3000/categories/tree
|
|
```
|
|
|
|
Causa: `frontend/src/lib/api.ts` declaraba `cache: 'no-store'` en todas las funciones de fetching (`fetchCategories`, `fetchProducts`, etc.). Esto fuerza render dinámico en cualquier página que las llame, anulando el `export const revalidate = 3600` de `app/page.tsx`.
|
|
|
|
Adicionalmente, 4 warnings de Turbopack sobre filesystem access dinámico en `frontend/src/app/uploads/[...path]/route.ts` (`path.join(root, filename)` con `root` variable desde `UPLOAD_ROOTS`).
|
|
|
|
## Diseño
|
|
|
|
### `frontend/src/lib/api.ts`
|
|
- Quitar `cache: 'no-store'` de las funciones que se llaman desde **server components** (`fetchCategories`, `fetchProducts`, `fetchBrandBySlug`, `fetchPage`, `fetchBrands`, `fetchCategoryBySlug`, `fetchProductBySlug`, `fetchProductVariants`, `fetchVariantPrice`, `fetchStockAvailability`).
|
|
- Mantener `cache: 'no-store'` solo en `fetchSearchSuggestions` (llamada por componentes cliente / barra de búsqueda que necesitan datos frescos).
|
|
|
|
### Páginas server-rendered
|
|
Añadir `export const revalidate = 3600` a:
|
|
- `frontend/src/app/products/page.tsx`
|
|
- `frontend/src/app/products/[slug]/page.tsx`
|
|
- `frontend/src/app/categories/page.tsx`
|
|
- `frontend/src/app/categories/[slug]/page.tsx`
|
|
- `frontend/src/app/brands/page.tsx`
|
|
- `frontend/src/app/brands/[slug]/page.tsx`
|
|
|
|
### Búsqueda
|
|
- `frontend/src/app/search/page.tsx`: `export const dynamic = 'force-dynamic'` (searchParams dinámicos, no se cachea).
|
|
|
|
### Uploads route
|
|
- Añadir comentarios `/*turbopackIgnore: true*/` dentro de las llamadas `path.join(...)` que usan variables runtime (`root`, `original.root`, `cacheDir`) en `frontend/src/app/uploads/[...path]/route.ts`. La página ya es `force-dynamic` así que los warnings son puramente de análisis estático.
|
|
|
|
## Riesgos
|
|
|
|
- Bajo. Cambio de comportamiento: las páginas con datos pasarán a ISR (cache 1h). Si el operador crea un producto, no aparece en la web hasta 1h después.
|
|
- Mitigación: para invalidación inmediata el backend ya soporta `revalidatePath` desde admin (futuro). Por ahora se acepta 1h de stale.
|
|
- Búsqueda sigue siendo force-dynamic (datos frescos siempre).
|
|
|
|
## Plan
|
|
|
|
1. Editar `frontend/src/lib/api.ts` (quitar `cache: 'no-store'` de las 10 funciones server-side).
|
|
2. Añadir `revalidate = 3600` a las 6 páginas listadas.
|
|
3. Añadir `force-dynamic` a `/search`.
|
|
4. Añadir comentarios turbopackIgnore a uploads/route.ts.
|
|
5. `cd frontend && npx tsc --noEmit`.
|
|
6. `cd frontend && NEXT_PUBLIC_API_URL=… npm run build`.
|
|
7. Verificar: `Route /` ahora es `○ Static` con `Revalidate 1h`.
|
|
8. Verificar: 0 errores DYNAMIC_SERVER_USAGE, 0 warnings de filesystem.
|
|
9. Cerrar gates. |