Преглед изворни кода

P1-10: performance-audit afgerond (code-niveau) — eager-TabBarView op 4 pagina's bevestigd, cache:false op HomeTabelCall/gemeenten+provincies-calls gevonden, dode EstablishmentsNewCall naar P2-7

bob пре 1 месец
родитељ
комит
eb8d0bb5ea
1 измењених фајлова са 61 додато и 5 уклоњено
  1. 61 5
      TASKS.md

+ 61 - 5
TASKS.md

@@ -349,11 +349,64 @@ Uitgaan-pagina (typografie/contrast/spacing), Event-pagina,
 HorecagelegenhedenOverzicht, tabel-kaartje-afstemming met
 slider-kaartje, categorie-tag mag titel/datum niet overstemmen.
 
-**P1-10 · Eigenaar: Onbepaald, onderzoek nodig.** Performance:
-- Dubbele/onnodige netwerkverzoeken checken (audit, nog te doen).
-- 6-7 tabbladen laden allemaal meteen hun eigen data bij elke
-  tabwissel/herbouw (TabBarView bouwt alle tabs eager) —
-  `horecagelegenheden_overzicht(_sort_page/_page_data_type)_widget.dart`.
+**P1-10 · Eigenaar: Onbepaald.** Performance. **2026-08-05: audit
+afgerond (Claude, code-niveau), concrete bevindingen:**
+1. **Eager-TabBarView bevestigd op 4 pagina's, niet alleen de 3 al
+   genoemde:** Flutter's `TabBarView` bouwt altijd alle tabs meteen
+   (geen lazy-tabs), dus bij page-load vuren alle tabs hun eigen
+   `FutureBuilder`-API-call tegelijk af, ook de 5-6 tabs die de
+   gebruiker nog niet ziet:
+   - `horecagelegenheden_overzicht_widget.dart`: 6 tabs, elk
+     `EstablishmentsCall.call(horcat: '<id>', ...)` met een eigen
+     categorie-id (17969/17963/34/17965/17967/17968 — echt
+     verschillende calls, geen letterlijke duplicaten).
+   - `horecagelegenheden_overzicht_sort_page_widget.dart`: 7 tabs,
+     zelfde patroon.
+   - `horecagelegenheden_overzicht_page_data_type_widget.dart`: 6
+     tabs, zelfde patroon.
+   - **Nieuw gevonden, stond nog niet in de vorige documentatie:**
+     `home_widget.dart` heeft hetzelfde patroon — 6 tabs, elk met een
+     eigen `HomeUitgaantabelKaartComponentWidget` → eigen
+     `HomeTabelCall`-aanroep, dus ook hier 6 gelijktijdige requests bij
+     het openen van Home (plus 1 losse `HomeUitgaanSliderComponent`
+     bovenaan, buiten de tabs, geen probleem).
+2. **`EstablishmentsCall` heeft al `cache: true`** (`api_calls.dart:1458`)
+   en `ApiCallOptions extends Equatable` met `params`/`headers` in de
+   `props`-lijst (`api_manager.dart:124-138`) — caching werkt dus
+   functioneel correct op basis van echte parameterwaarden (geen
+   reference-equality-bug). Dit voorkomt herhaalde netwerkcalls bij
+   een **rebuild** van dezelfde tab (bv. na een `setState` elders op de
+   pagina), maar lost de **initiële burst** van 6-7 gelijktijdige calls
+   bij eerste page-load niet op — caching helpt pas ná de eerste keer.
+3. **Nieuwe bevinding: `HomeTabelCall` heeft `cache: false`**
+   (`api_calls.dart:465`) — in tegenstelling tot de Establishments-
+   pagina's vuurt Home dus bij *elke* rebuild opnieuw alle 6
+   tab-requests af, niet alleen bij de eerste page-load. Fix: `cache:
+   true` zetten in de FlutterFlow API-call-config (Response &
+   Test-tabblad) — geen codewijziging nodig, low-risk (resultaten zijn
+   read-only lijstdata, geen sessie-afhankelijke content).
+4. **Nieuwe bevinding: `GemeentenCall`/`ProvinciesCall` hebben `cache:
+   false`** (`api_calls.dart:1274/1306`), aangeroepen vanuit
+   `select_state_drop_down_component_widget.dart`. Dit scherm is het
+   verplichte eerste scherm na inloggen (`nav.dart:117/124`) én apart
+   bereikbaar via het drawer-menu (2x, zie het "dubbele blok"-punt bij
+   P2-7) — elke keer dat het scherm opent, worden beide
+   provincie/gemeente-lijsten opnieuw over het netwerk opgehaald,
+   terwijl deze data binnen een sessie feitelijk statisch is. Zelfde
+   low-risk fix: `cache: true` in de builder, geen codewijziging.
+5. **Bijvangst, geen performance-impact maar wel opschoon-kandidaat:**
+   `EstablishmentsNewCall` (`api_calls.dart:845`, `cache: false`) wordt
+   nergens meer aangeroepen — dode API-call-definitie, toevoegen aan de
+   P2-7-opschoonlijst.
+- **Niet opgelost, apart punt voor Bob om te beoordelen:** de
+  eager-TabBarView-burst zelf (punt 1) is in de FlutterFlow-builder-UI
+  niet direct te fixen — `cache: true` helpt alleen bij herhaling, niet
+  bij de eerste gelijktijdige burst. Echte fix vraagt lazy tab-content
+  (bv. een `IndexedStack` met on-demand `FutureBuilder` per tab-
+  activatie i.p.v. `TabBarView`), wat een structurele herbouw is —
+  vermoedelijk custom code nodig, buiten scope van deze audit. Geen
+  bekend rate-limit-probleem op de Drupal-API, dus mogelijk lage
+  prioriteit ondanks de N×-overhead.
 
 **P1-11 · Eigenaar: Onbepaald, onderzoek nodig.**
 Responsive/screensize-audit — o.a. het vaste 200×200px-tegelformaat in
@@ -401,3 +454,6 @@ code).
   waar 6 zouden volstaan).
 - `EventWidget`-route: heraansluiten of definitief schrappen (losse
   orphan-route).
+- `EstablishmentsNewCall` (`lib/backend/api_requests/api_calls.dart:845`)
+  wordt nergens meer aangeroepen — dode API-call-definitie (gevonden
+  bij de P1-10-performance-audit 2026-08-05).