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 @@
-
+
{#if combinedData && combinedData.length > 0}
@@ -212,6 +306,7 @@ Box view layout + {#if virtualize} + + {/if}
Legend: @@ -288,6 +393,7 @@ Filters: