Virtualize the remaining full-row lists: Beteiligte, Dateien, Kontakte and the phone card lists
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 55/100
- Issue-Typ
- Feature
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- android, csharp
- Bereich
- frontend, mobile, performance
Rechercherichtung
Start with #687 and its VirtualizingStackPanel implementation, then inspect the named lists: EtbCards, ScbaCards, ForcesCards, RolesCards, TasksCards, InvolvedPartiesList, ContactsList, and FilesList. Work module by module, beginning with the phone Atemschutz and Kräfte cards; check AGENTS.md for layout traps and preserve row keyboard navigation. For each changed list, done means timings stay flat from N=25 to N=200, Tab and Enter work across scrolled rows, and phone card lists have before and after screenshots.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Problem
#688 (for #685) removed the Workspace container queries, so leaving a module now costs time linear in its number of rows, where it used to be quadratic. But several lists still build every row, whether it is on screen or not, so opening and leaving them still grows with the data:
| List | Module | Grows with |
|---|---|---|
InvolvedPartiesList |
Beteiligte | Beteiligte (~50 visuals per row, 3 TextBoxes) |
FilesList |
Dateien | the incident's files (~30 visuals per row) |
ContactsList |
Kontakte | Stammdaten personnel (~25 visuals per row); a Kreis-wide roster can run into the thousands |
EtbCards, ScbaCards, ForcesCards, RolesCards, TasksCards |
phone layout (≤ 640 px) | the same data the desktop DataGrids virtualize |
MatrixRowsList |
CO-Messprotokoll | floors × dwellings; usually small, so lowest priority |
The desktop ETB, Kräfte, Funktionen, Aufgaben and Atemschutz grids are DataGrids and already virtualize. They stay flat and are out of scope here.
Measurements
These come from the measurement on #685 (comment) and from #688.
Setup:
- headless, Release, inside the real
MainView; - median of 3 warm rounds;
- about 40–60 ms of every switch is the harness's own CPU rendering.
Results:
- Leaving a module with the queries gone (desktop): Beteiligte takes 291 ms at N=200, Dateien 184 ms and Kontakte 122 ms. That is acceptable, but it still scales with N.
- Opening a module costs the same with or without the queries; it is plain row building. Opening Atemschutz in the phone layout with 200 Trupps still takes about 2 s.
- Those times come from a desktop CPU running the phone layout. Real Android hardware is slower.
Proposal
Virtualize each of these lists the way #687 did for the Stammdaten Fahrzeuge and Personal lists: an ItemsControl/ListBox over a VirtualizingStackPanel inside a ScrollViewer with a bounded height.
Do it module by module, worst first:
- the phone card lists, Atemschutz and Kräfte first (the Android Lagebuch);
- Beteiligte;
- Kontakte;
- Dateien;
- CO-Messprotokoll, only if it ever shows up.
Traps known from #687
- Tab order breaks in virtualized lists.
- After
ScrollIntoView,VirtualizingStackPanel's children are no longer in visual order, so Tab jumps backwards. - #687 fixed this with
RowTabNavigation, which ranks rows byTabIndex. - Beteiligte rows hold editable TextBoxes, so Tab through them must keep working.
- After
- No content-sized columns over a virtualized list.
- A column with
MaxWidthandHorizontalAlignment="Center"changes width while the user scrolls. - Use
Stretchinstead (see AGENTS.md, Layout traps).
- A column with
- Shared column widths. Row
Grids in anItemsControlneedGrid.IsSharedSizeScopewithSharedSizeGroup. Rows that are not realized yet do not take part, so the widths have to be fixed or bounded rather thanAuto. - Tests that walk the visual tree for rows only see the realized ones once a list virtualizes. Such tests need a tall enough window or a scroll step.
Acceptance
For each list that is changed:
- open and leave times stay flat from N=25 to N=200, with numbers in the PR;
- keyboard navigation (Tab, and Enter where used) works across rows, including rows scrolled into view;
- a before/after phone screenshot for any card list.
- Vorherrschende Sprache
- C#
- Sterne
- 1
- Forks
- 3
- Ø Merge
- 4 Std. 15 Min.
- Gemergte PRs (30 T.)
- 181
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus CodeForFire/lagebuch
-
Stammdaten: in the Checkliste editor the PFLICHT header is not aligned with its columnEvtl. vergeben @Saad-elnagar hat das vor 3 Tagen übernommen. Offenbug ux
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
CodeForFire/lagebuch#714 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Stammdaten: on a phone the Fahrzeuge editor squeezes Wache and Funkrufname to nothingEvtl. vergeben @Saad-elnagar hat das vor 3 Tagen übernommen. Offenbug ux
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
CodeForFire/lagebuch#713 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
CodeForFire/lagebuch#405 ·
Maintainer antworten meist innerhalb von 1 Tag
-
documentation good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
CodeForFire/lagebuch#349 ·
Maintainer antworten meist innerhalb von 1 Tag
-
documentation good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
CodeForFire/lagebuch#348 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in CodeForFire/lagebuch
Ähnliche Issues
-
area-multitenancy area-security p1-recommended priority-high technical-debt
Schwierigkeit 2/5 Unter einer Stunde Anfängerfreundlichkeit 75/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
-
help wanted needs-unity ready for a contributor
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
eyalgolan/statecraft-israel#1542 ·
Maintainer antworten meist innerhalb von 1 Tag
-
kind/enhancement Provider Upgrade pulumi/pulumi-azure R1 Task
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
pulumi/pulumi-azure#3669 ·
-
[BUG] FromCString causes 1 byte OOB read in native codeEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offentype/bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag