[Prestaties][P2] Groot deck openen: koude kwaliteits- en privacyanalyse blokkeert de UI (655 + 450 ms bij 600 dia's) #2634
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#2634
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptoom
Een grote presentatie openen bevriest de app kort voordat je kunt werken; hoe groter het deck, hoe langer.
Oorzaak
Bij het openen draaien de kwaliteitscontrole en de tekst-privacyscan koud en synchroon op de UI-isolate (de memo's zijn per dia en dus nog leeg). Daarnaast wordt het bestand tweemaal gelezen en tweemaal op uitvoerbare inhoud gescand: eerst voor het alarm (
scanForUnsafeMarkdown,lib/state/tabs_provider.dart:484→file_service.dart:646), daarna opnieuw inopenDeckDetailedvlak vóór het parsen (lib/services/file/file_service_open.dart:296). Die tweede keer is bewust (TOCTOU), de eerste is dan overbodig.Meting
Tijdelijke meetproef (debug-JIT, Apple Silicon), gangbare mix van diatypes:
Parsen en serialiseren zijn verwaarloosbaar (ook de autosave elke 25 s is dat: 0,5-1,8 ms). De analyse is het werk.
Voorgestelde oplossing
Isolate.runover alle dia's, resultaten terug in de per-dia-memo.TextPainteren hoort op de UI-isolate; verdeel de koude pas over frames (bijv. 20 dia's per idle-taak viaSchedulerBinding.scheduleTask(…, Priority.idle)), en laat het paneel/de badges oplopen terwijl hij loopt. De export-gate wacht op "compleet".openDeckDetailedlaten opgaan).Wat overeind moet blijven
Fail-closed: niets uitvoerbaars wordt geopend; de export weigert zolang de analyse niet compleet is.
Toets
Open een deck van 600 dia's in een widgettest: geen enkele frame-taak > 50 ms (via
SchedulerBinding.addTimingsCallbackin een integratietest), uitkomst identiek aan de synchrone analyse.Onderdeel van de prestatie- en stabiliteitsinspectie van 28-10-2026 (EPIC #2637).