De l'équipe SyncGallery

De 100 000 fichiers à un million

Chaque application repose sur un chiffre autour duquel ses développeurs la conçoivent discrètement. Le nôtre était de 100 000 fichiers, jusqu'à l'arrivée de vrais utilisateurs.

Une galerie de téléphone qui s'étend en un vaste champ de miniatures de photos bien rangées

Un objectif qui semblait généreux

Lorsque nous avons commencé à développer SyncGallery, nous nous sommes fixé un objectif de performance clair : l'application devait rester rapide avec 100 000 fichiers multimédias sur un appareil. Nous avons écrit chaque algorithme en gardant ce chiffre en tête et effectué nos tests avec des photothèques de cette taille environ.

À l'époque, 100 000 fichiers semblaient un chiffre généreux. À raison de 30 photos par jour, tous les jours, il faudrait environ neuf ans pour atteindre ce total. Nous étions convaincus que personne n'en garderait davantage sur un téléphone.

Nos utilisateurs nous ont donné tort

Peu après la première version, nous avons compris à quel point cette hypothèse était fausse. Les vraies photothèques dépassaient largement notre plafond : des années d'archives photo, des photos transférées depuis d'anciens téléphones et ordinateurs, et des collections familiales entières stockées sur de grandes cartes mémoire. De nombreux téléphones Android acceptent encore des cartes mémoire de 512 Go, voire de 1 To, de quoi accueillir des photothèques bien plus grandes que notre objectif initial.

L'application ne s'est pas effondrée d'un coup au 100 001e fichier : les limites de performance sont rarement aussi polies. En revanche, des opérations qui auraient dû sembler instantanées prenaient nettement plus de temps, et l'expérience continuait de se dégrader à mesure que la photothèque dépassait l'objectif. Pour les personnes ayant les plus grandes photothèques, sans doute celles qui ont le plus besoin d'une application de sauvegarde, ce n'était pas acceptable.

Ce qui change à une échelle dix fois plus grande

De nombreux raccourcis inoffensifs à 100 000 fichiers deviennent des problèmes à un million. Le schéma est toujours le même : un coût augmente discrètement avec la taille de la photothèque.

  • Tout garder en mémoire. Une liste de 100 000 entrées tient facilement en RAM. À une taille dix fois supérieure, multipliée par les écrans et les caches, la pression sur la mémoire provoque des saccades et, dans le pire des cas, des plantages.
  • Revérifier chaque fichier alors que seuls quelques-uns ont changé. Réexaminer toute la photothèque parce que quelques photos sont arrivées passe presque inaperçu à 100 000 fichiers. À un million, cela peut représenter des minutes de travail en arrière-plan sans aucun bénéfice visible.
  • Mettre à jour l'écran après chaque modification. Une mise à jour par fichier traité est imperceptible dans une petite photothèque. Quand les modifications arrivent par dizaines de milliers, cela peut figer l'interface.
  • Laisser les caches grossir indéfiniment. Un cache sans limite finit par concurrencer les écrans qu'il était censé accélérer.

Il ne s'agit pas de bugs exotiques. Ce sont des décisions d'ingénierie ordinaires qui cessent de fonctionner un ordre de grandeur plus loin.

Reconstruire pour un million

Nous avons relevé l'objectif à un million de fichiers et repassé toute l'application en revue avec ce chiffre comme nouvelle référence. Quelques règles guident désormais tout ce que nous développons :

  • Garder une consommation de mémoire stable quand la photothèque grandit. Les écrans de liste les plus lourds chargent désormais les fichiers depuis la base de données par fenêtres au lieu de tout garder en mémoire. Les grands caches d'images sont limités : ils évincent les anciennes entrées au lieu de grossir indéfiniment. Ce déploiement se poursuit écran par écran ; c'est la discipline à laquelle nous nous tenons désormais, pas une ligne d'arrivée que nous aurions franchie partout.
  • Comparer au lieu de tout relire. Les analyses suivent ce qui a changé au lieu de tout retraiter. Lorsqu'un fournisseur cloud propose un flux de modifications, nous utilisons ces modifications au lieu de relister des dossiers entiers.
  • Ne jamais faire attendre l'interface à cause de la photothèque. Les travaux lourds s'exécutent en arrière-plan, par lots. Les mises à jour de l'écran sont regroupées pour qu'une rafale de 10 000 modifications ne déclenche pas 10 000 réaffichages.
  • Mesurer sur de vrais appareils avec de vraies photothèques. Le profilage a remplacé les suppositions. Les plus grands gains sont venus d'endroits que nous n'aurions jamais soupçonnés sans mesurer.

La rapidité est une habitude, pas une étape

Le changement le plus important n'a été aucune correction en particulier. Il a consisté à intégrer la question du million de fichiers dans l'évaluation de chaque nouvelle fonctionnalité : que devient cet écran, cette analyse ou ce cache lorsque la photothèque est dix fois plus grande que prévu ?

Quelqu'un dépassera toujours le chiffre que nous choisirons, et cette fois, nous préférons être prêts.

Si vous avez une photothèque immense, ce travail a été fait pour vous. Si SyncGallery vous semble un jour lent avec votre collection, dites-le-nous : les vraies photothèques nous en apprennent davantage que les benchmarks synthétiques.

SyncGallery

Essayez SyncGallery

Une application de galerie pour Android, avec une synchronisation cloud que vous maîtrisez.

Disponible sur Google Play
Plus d'articles du blogRetour en haut