Skip to content

Nie blokuj strony na resolveCurrency przed Suspense - #7

Merged
pawelekbyra merged 3 commits into
mainfrom
claude/image-upload-display-diagnosis-qevpga
Jul 7, 2026
Merged

pawelekbyra merged 3 commits into
mainfrom
claude/image-upload-display-diagnosis-qevpga

Conversation

@pawelekbyra

Copy link
Copy Markdown
Owner

Summary

  • Strona główna, listing produktów i strona kategorii robiły await resolveCurrency(...) bezpośrednio w komponencie strony, poza jakąkolwiek granicą <Suspense> — resolveCurrency woła Store API (/api/v3/store/markets) na backendzie Render.
  • Skutek: cała strona (łącznie ze statyczną powłoką — Hero, nagłówki, breadcrumbs) czekała na tę jedną odpowiedź, zanim przeglądarka dostała cokolwiek. Przy wolniejszych odpowiedziach Render (1.7–5.7s zaobserwowane na /api/v3/store/markets) dawało to kilkusekundowy biały ekran przy każdym cache miss (co godzinę, cacheLife("hours")).
  • Fix: resolveCurrency(...) nie jest już await'owane w page.tsx — promise leci nierozwiązany do komponentów już opakowanych w <Suspense> (FeaturedProducts, ProductListing), gdzie jest await'owane równolegle z pobieraniem produktów/filtrów. Powłoka strony streamuje się natychmiast.
  • Zaktualizowany docs/technical-debt.md z zasadą na przyszłość: żaden await do Store API nie powinien siedzieć bezpośrednio w page.tsx bez <Suspense> nad nim.

Test plan

  • npx tsc --noEmit clean
  • npx biome check clean
  • npx vitest run — 91/91 passing
  • npm run build — /[locale], /[locale]/products, /[locale]/c/[...permalink] wszystkie pokazują się jako Partial Prerender (◐), potwierdzając że statyczna powłoka i dynamiczna część renderują się osobno

Generated by Claude Code

claude added 3 commits July 7, 2026 12:38
Zasada na przyszłość dla F4 reszty (rynek/cena): handler najpierw,
subskrypcja w adminie potem — świadomie nie subskrybujemy *.
Home, listing produktów i strona kategorii await'owały
resolveCurrency() (request do backendu) bezpośrednio w komponencie
strony, więc CAŁA strona — łącznie ze statyczną powłoką — czekała na
odpowiedź Render, zanim cokolwiek trafiało do przeglądarki. Przy
wolniejszych odpowiedziach backendu dawało to kilkusekundowy biały
ekran. Promise przekazywany jest teraz nierozwiązany do komponentów
już chronionych przez Suspense (FeaturedProducts, ProductListing) —
powłoka strony streamuje się od razu, waluta i produkty ładują się
równolegle w tle.
@vercel

vercel Bot commented Jul 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
sklepik_front Ready Ready Preview, Comment Jul 7, 2026 4:51pm

@pawelekbyra
pawelekbyra merged commit 9cf6a95 into main Jul 7, 2026
2 checks passed

This branch was successfully deployed

1 active deployment
Preview — a81150a8 Deployed Jul 7, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants