From acaf760b36699b6415e4403f6556a8029327d7d5 Mon Sep 17 00:00:00 2001
From: Josh Creek <8179928+jcreek@users.noreply.github.com>
Date: Tue, 15 Sep 2026 17:46:19 +0100
Subject: [PATCH] perf(pokedex): send the box grid as packed rows with the page
The server load fetched a full combined-data page at a 9999 item page size,
carrying detail text and ownership fields the grid never renders, and the client
re-fetched the same payload after hydration.
Load a trimmed grid row instead and pack it as positional tuples so field names
are not repeated for every one of a thousand-plus entries. Entry detail is
fetched on demand from the new per-entry endpoint when a cell is opened, and the
grid marks itself interactive so other page-start work can queue behind it.
---
.../pokedex/PokedexViewBoxes.svelte | 631 +++++++++++-------
src/lib/models/PokedexGridRow.ts | 58 ++
.../repositories/CombinedDataRepository.ts | 126 +++-
src/lib/services/PokedexGridService.ts | 38 ++
src/lib/utils/criticalPageWork.ts | 50 ++
.../[id]/entries/[entryId]/+server.ts | 18 +
src/routes/api/pokedexes/[id]/grid/+server.ts | 29 +
src/routes/pokedex/[id]/+page.server.ts | 68 +-
src/routes/pokedex/[id]/+page.svelte | 405 +++++++----
src/routes/shared/[token]/+page.svelte | 7 +-
tests/bdd/features/performance.feature | 2 +-
tests/bdd/steps/performance.steps.ts | 7 +-
.../pokedexGrid.integration.test.ts | 132 ++++
tests/unit/combinedDataRepository.test.ts | 125 +++-
tests/unit/criticalPageWork.test.ts | 103 +++
tests/unit/gridTransport.test.ts | 27 +
16 files changed, 1382 insertions(+), 444 deletions(-)
create mode 100644 src/lib/models/PokedexGridRow.ts
create mode 100644 src/lib/services/PokedexGridService.ts
create mode 100644 src/lib/utils/criticalPageWork.ts
create mode 100644 src/routes/api/pokedexes/[id]/entries/[entryId]/+server.ts
create mode 100644 src/routes/api/pokedexes/[id]/grid/+server.ts
create mode 100644 tests/integration/pokedexGrid.integration.test.ts
create mode 100644 tests/unit/criticalPageWork.test.ts
create mode 100644 tests/unit/gridTransport.test.ts
diff --git a/src/lib/components/pokedex/PokedexViewBoxes.svelte b/src/lib/components/pokedex/PokedexViewBoxes.svelte
index bcc0191..5994310 100644
--- a/src/lib/components/pokedex/PokedexViewBoxes.svelte
+++ b/src/lib/components/pokedex/PokedexViewBoxes.svelte
@@ -1,15 +1,109 @@
-