Skip to content

Chargement progressif (streaming) des collections #153

Description

@aliceout

Problème

À l'ouverture, l'app charge toute la collection en un bloc, puis déchiffre tout avant d'afficher l'écran. Plus l'historique grandit (Journal avec images base64), plus c'est lent et saccadé — sur l'écran le plus visité.

Pourquoi pas la pagination

La recherche est 100 % côté client (texte cherchable construit en mémoire, serveur aveugle). Paginer = ne charger qu'une partie → la recherche ne trouve plus les entrées non chargées, car le serveur ne peut pas chercher à notre place. → Pagination rejetée.

Proposition : streamer

Charger tout pareil, mais progressivement : afficher les premières entrées dès qu'elles arrivent, le reste continue en fond. Déchiffrer par paquets (idéalement dans un Web Worker) pour ne pas geler l'UI.

  • Texte d'abord (léger) → recherche / heatmap / stats complètes une fois le flux terminé.
  • Images en lazy : ne pas tout garder en mémoire, charger chaque photo quand sa ligne / son lecteur est visible.

Côté serveur aveugle : il ne peut pas trier par contenu, mais il peut renvoyer « les N blocs chiffrés les plus récents » par date sans rien déchiffrer.

La recherche reste-t-elle complète ?

Oui : tout finit en mémoire, exactement comme aujourd'hui. Seule nuance : pendant que le flux arrive encore, afficher un indicateur « indexation… » qui disparaît à la complétion ; une recherche lancée avant la fin ne couvre que ce qui est déjà arrivé.

Lien

Complémentaire au cache local chiffré (#152) : le streaming règle la première ouverture (affichage instantané) ; le cache règle les suivantes + le hors-ligne. Le streaming corrige la lenteur/les saccades ; il borne la mémoire seulement combiné aux images en lazy.

Critères d'acceptation

  • Première entrée affichée sans attendre le déchiffrement complet
  • Déchiffrement par lots, UI non bloquée (Web Worker si pertinent)
  • Images chargées à la demande (lazy), pas toutes en mémoire
  • Recherche complète après la fin du flux ; indicateur d'indexation pendant
  • Pas de régression heatmap / stats / recherche

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestperformancev3Reporté à la v3 (post-v2)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions