[Opstart][P1] Vóór het eerste frame — en dus vóór het venster op Windows — draait onbegrensd synchroon werk #2626
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#2626
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
"De app start niet": na dubbelklikken gebeurt er een tijd niets, of helemaal niets. Wie dan nog eens klikt, start een tweede proces (#2627).
Oorzaak
Op Windows wordt het venster pas getoond bij het eerste frame (
windows/runner/flutter_window.cpp:40,SetNextFrameCallback → Show()). Alles wat vóór dat frame op de UI-isolate gebeurt, is voor de gebruiker onzichtbaar wachten. VóórrunApp(lib/main.dart:51-79) gebeurt:AssetStaging.pruneStale()(regel 54) — "mag de start niet ophouden", maar doet dat wel: het isunawaited, maarpruneStale(lib/services/asset_staging.dart:86) loopt elke bewaarde sessiemap (7 dagen) recursief en synchroon af (listSync(recursive: true)+statSync()per bestand,_newestModified, regel 128-142). Tussen twee mappen die blijven staan zit geenawait, dus dit is één ononderbroken blok op de UI-isolate. Het loopt precies wanneermainverderop wacht op het lexicon, dus vóór het eerste frame. De kosten groeien met het aantal geïmporteerde media in de afgelopen week; op Windows betaalt elkestatook de virusscanner.configureNativeWindow()enAssetStaging.initialize()— kort, maar zonder tijdslimiet.Niets hiervan logt een mijlpaal (#2618), dus een trage of hangende start is achteraf niet te onderscheiden van een crash.
Voorgestelde oplossing
pruneStaleecht asynchroon:dir.list()/stat()async (of het geheel inIsolate.run) en pas na het eerste frame starten — het is huishouding.Isolate.runontleden en indexeren (deawaitvóórrunAppmag blijven, de redenering inmain.dartdaarover klopt), of het lexicon vooraf als compacte binaire index bundelen.Wat overeind moet blijven
De lexicon-garantie (geen scan vóór het lexicon geladen is), het opruimen van verlopen staging en de rechtenbeperking op Linux.
Toets
pruneStaleop een stagingmap met 20 sessies × 500 bestanden roept geen*Sync-API aan (injecteerbaar bestandssysteem of tellende wrapper).Onderdeel van de prestatie- en stabiliteitsinspectie van 28-10-2026 (EPIC #2637).