Kavacode

Lab

Un cache à 2 niveaux pour consulter Wano Collector offline

  • mobile
  • architecture
  • performance
  • flutter
Comment nous avons implémenté une architecture de cache hybride pour garantir une expérience fluide même hors ligne sur Wano Collector.

Consulter ses collections de milliers d'objets tout en restant fluide, que ce soit dans le métro parisien, au fond d'un magasin ou en pleine campagne, c'est le défi technique que nous venons de relever avec la dernière mise à jour de Wano Collector.

Le problème : quand le réseau lâche, le défi des connexions instables

Un collectionneur consulte son app plusieurs fois par jour : vérifier une référence en brocante, scanner un code-barre en magasin, parcourir ses collections dans les transports. Mais la réalité terrain est brutale : réseaux mobiles capricieux, 4G/5G qui disparaît au fond d'un magasin, WiFi saturé.

Résultat ? Le temps de chargement est insupportables et la frustration devient maximale au pire moment.

La solution : cache hybride à 2 niveaux

Nous avons implémenté une stratégie qui combine performances et résilience.

Niveau 1 : Cache mémoire (RAM)

  • Objectif : performances max pour les données fréquemment consultées
  • Durée de vie : session applicative
  • Temps d'accès : < 1ms

Niveau 2 : Cache persistant avec Isar

  • Objectif : consultation offline et réseau dégradé
  • Technologie : Isar Database — base NoSQL ultra-rapide pour Flutter
  • Persistance : locale sur l'appareil
  • Avantage : survit aux redémarrages, aucune connexion nécessaire

Comment ça marche concrètement

flowchart

Au lancement

Un processus de préchargement s'exécute en arrière-plan pour synchroniser les collections depuis le serveur. La synchro est intelligente : elle ne télécharge que les deltas (modifications depuis la dernière synchro) pour économiser data et batterie.

En utilisation normale / réseau stable

Expérience totalement transparente. Wano interroge d'abord le cache mémoire, puis Isar si nécessaire, et enfin le serveur. Temps de chargement divisés par 10.

En mode dégradé ou offline

C'est là que ça devient intéressant :

  • Consultation : totalement fonctionnelle. Parcourez vos collections, cherchez des références, consultez les fiches détaillées.
  • Édition : désactivée temporairement. On ne peut pas garantir la cohérence des données sans serveur.

Dès que la connexion revient, la synchro reprend automatiquement en arrière-plan.

Les bénéfices

Pour les utilisateurs :

  • Navigation ultra-fluide même avec une 3G poussive
  • Consultation possible à 100 % offline (avion, métro, zones blanches)
  • Économie de data mobile
  • Autonomie préservée (moins de requêtes réseau = moins de consommation)

Pour l'infrastructure :

  • Réduction drastique de la charge serveur
  • Moins de requêtes API = économies d'hébergement
  • Meilleure scalabilité pour absorber les pics d'usage

Choix techniques : pourquoi Isar

Plusieurs options s'offraient à nous pour le cache persistant : SQLite, Hive, ObjectBox… Nous avons choisi Isar Community pour :

  • Ses performance : recherches ultra-rapides même sur 50k+ objets
  • Son modèle asynchrone : parfait pour Flutter
  • Sa faible empreinte mémoire
  • Un typage fort : avec génération de code
Isar et Wano Collector

Conclusion

Le passage en offline-first n'est pas qu'une feature, c'est un changement de paradigme. Au lieu de considérer le réseau comme acquis et l'offline comme une exception, nous inversons la logique : l'application fonctionne d'abord localement, et le réseau devient un bonus pour la synchronisation.

Résultat ? Une app qui respecte enfin la réalité d'usage des collectionneurs nomades.


Wano Collector est disponible sur iOS et Android. Envie d'implémenter une architecture offline-first dans votre app ? N'hésitez pas à nous contacter et parlons-en ensemble. 😊