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
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.
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