Lenteur du calcul de la règle de distance (calcul WoT 100% côté client)
Labels : bug, p2 Description : ## Symptôme Le calcul de la **règle de distance** (évaluation d'adhésion) est très lent pour les utilisateurs. ## Diagnostic Contrairement à l'hypothèse initiale (requête `durt2` mal optimisée ou index `squid` manquant), le calcul **n'utilise ni squid ni GraphQL**. Il est fait **100 % côté client** (`lib/services/distance_service.dart`) : 1. **Téléchargement de toute la toile de confiance** par RPC brut (`state_queryStorageAt`). `fetchWotData` itère sur _toutes_ les identités jamais créées (`identity.nextIdtyIndex()`), récupère par lots de 1000 les clés + adhésions, puis par lots de 500 les `certsByReceiverKey` de **chaque** identité → des dizaines d'appels RPC qui rapatrient l'intégralité des certifications. Le temps dépend surtout de la latence/bande passante du nœud contacté. 2. **Traitement synchrone sur l'isolate UI** : décodage SCALE de toutes les certifications + **deux** parcours DFS récursifs (profondeur 5 pour la distance, 4 pour la qualité), aucun `Isolate.run` → gèle potentiellement l'interface. 3. **Aucun timeout** sur les `queryStorageAt` : un nœud lent = barre de progression bloquée indéfiniment. 4. Le graphe est mis en cache (TTL 3 h) et déclenché au tap → le coût est celui du **premier calcul**, pas de recalculs intempestifs. ## Pistes d'optimisation **Côté Ğecko (faisable rapidement) :** - déplacer décodage SCALE + DFS dans un isolate (dégèle l'UI) ; - fusionner les deux DFS (le sous-arbre profondeur 4 est inclus dans celui de profondeur 5) → coût CPU /2 ; - ajouter des timeouts sur les requêtes RPC. **Côté infra (levier radical) :** - si `squid` pouvait exposer les **referees / l'évaluation de distance pré-calculés** (ou au moins indexer le graphe de certifications), une requête GraphQL remplacerait tout le téléchargement RPC. → **Question : squid peut-il exposer un endpoint distance/referees ?** ## Références code - `lib/services/distance_service.dart` — `fetchWotData`, `computeDistanceAndQuality`, `_distanceRuleRecursive` - `lib/providers/distance_provider.dart` — cache + déclenchement - `lib/widgets/distance_quality_section.dart` — UI
issue