perf(data): paralléliser les lectures Room au démarrage + requête d’existence optimisée #7
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
CyrilLeblanc/gresit#7
Loading…
Add table
Add a link
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?
Contexte
Au démarrage, deux lectures Room gaspillent du temps sur le chemin critique du premier contenu utile (arrêts/lignes) :
TransitRepository.isDataLoaded()(data/repository/TransitRepository.kt:86) appelleclusterDao.getAll().isNotEmpty()→ charge tous les clusters en objets en mémoire, à chaque lancement, juste pour répondre oui/non.StaticDataLoader.readAllStaticData()(domain/StaticDataLoader.kt:59) lit 5 tables (clusters, lines, sequences, clusterLines, geometries) en séquentiel, dontgeometriesest la plus volumineuse.Objectif : réduire le temps d'apparition du premier contenu utile sur les lancements suivants (après le premier import), sans toucher au premier lancement (dominé par l'écriture).
Comportement attendu
isDataLoaded()→ requête d'existence O(1) (SELECT EXISTS(SELECT 1 FROM clusters LIMIT 1)), plus d'allocation de la liste complète des clusters.readAllStaticData()→ lectures en parallèle (coroutineScope { async{} ×5 }), passage de « somme » à « max ».Pistes d'implémentation
ClusterDao: ajouter@Query("SELECT EXISTS(SELECT 1 FROM clusters LIMIT 1)") suspend fun hasAny(): Boolean;isDataLoaded()l'utilise.StaticDataLoader.readAllStaticData:coroutineScope { val clusters = async { repo.getAllClusters() }; … }puis.await()sur les 5 (Roomsuspend→ déjà surDispatchers.IO).StaticDataResultet la signature inchangés côté appelant — pas de ripple.Critères d'acceptation
isDataLoaded()n'alloue plus la liste complète des clusters.readAllStaticDatas'exécutent en parallèle (même résultat pour l'appelant).assembleDebug/assembleReleaseOK ; aucune régression visible (carte, recherche, ETAs, plan).loadData()(logs temporaire retirés avant commit) sur cold start suivant — documenter le chiffre.