@poka
a transmettre a ceux qui s’occupent de ce point ! je ne sais pas qui c’est
Claude:
Lenteur de la règle de distance — diagnostic
Le calcul de la règle de distance dans Ğecko n’utilise ni squid ni GraphQL, contrairement à ce qu’on supposait. Il est fait 100 % côté client (lib/services/distance_service.dart) :
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 certifs. Le temps dépend surtout de la latence/bande passante du nœud contacté.
Traitement synchrone sur l’isolate UI : décodage SCALE de toutes les certifs + deux parcours DFS récursifs (profondeur 5 pour la distance, 4 pour la qualité) — aucun Isolate.run. → gèle potentiellement l’interface.
Aucun timeout sur les queryStorageAt : nœud lent = barre de progression bloquée.
Le graphe est mis en cache (TTL 3h) et déclenché au tap → le souci est le coût du premier calcul, pas des recalculs.
Piste radicale (côté infra) : si squid pouvait exposer les referees / l’évaluation de distance pré-calculés (ou au moins l’ensemble des referees et le graphe de certifs indexé), une requête GraphQL remplacerait tout ce téléchargement RPC. C’est de loin le plus gros levier. → Question pour toi : squid indexe-t-il déjà les certifications / peut-il exposer un endpoint distance/referees ?
Quick-wins côté Ğecko (qu’on peut faire nous-mêmes, en attendant) : décodage + DFS dans un isolate, fusion des deux DFS, timeouts RPC.
Pour Tikka, j’ai demandé à l’IA de faire comme Césium V2 pour calculer la distance.
Cela semble assez rapide car on ne demande à Squid que les membres jusqu’à 5 pas pour lesquels on vérifie le statut de référent.
Squid à l’avantage de fournir les certifications émises, ce que Duniter ne peut pas faire.
Je fais donc le calcul localement avant de demander une évaluation de distance à Duniter.