Vom SyncGallery-Team

Von 100.000 Dateien zu einer Million

Jede App hat eine Zahl, auf die ihre Entwickler stillschweigend hin entwerfen. Unsere waren 100.000 Dateien – bis echte Nutzer kamen.

Eine Handy-Galerie, die sich zu einem riesigen Feld geordneter Foto-Miniaturansichten ausweitet

Ein Ziel, das großzügig wirkte

Als wir mit der Entwicklung von SyncGallery begannen, legten wir ein klares Performance-Ziel fest: Die App musste auch mit 100.000 Mediendateien auf einem Gerät schnell bleiben. Wir schrieben jeden Algorithmus mit dieser Zahl im Hinterkopf und testeten mit Bibliotheken ungefähr dieser Größe.

Damals schienen 100.000 Dateien großzügig. Bei 30 Fotos pro Tag, jeden Tag, würde es etwa neun Jahre dauern, diese Menge zu erreichen. Wir waren sicher, dass niemand mehr als das auf einem Telefon aufbewahren würde.

Die Nutzer haben uns widerlegt

Kurz nach der ersten Veröffentlichung erfuhren wir, wie falsch diese Annahme war. Echte Bibliotheken waren weit größer als unsere Obergrenze: jahrelange Kameraarchive, von älteren Telefonen und Computern übernommene Fotos und ganze Familiensammlungen auf großen Speicherkarten. Viele Android-Telefone nehmen noch immer Speicherkarten mit 512 GB oder sogar 1 TB auf – Platz für Bibliotheken, die um ein Vielfaches größer sind als unser ursprüngliches Ziel.

Die App brach nicht plötzlich bei Datei 100.001 zusammen – Leistungsgrenzen sind selten so höflich. Stattdessen dauerten Vorgänge, die sich sofort anfühlen sollten, spürbar länger, und das Erlebnis wurde immer schlechter, je weiter eine Bibliothek über das Ziel hinauswuchs. Für Menschen mit den größten Bibliotheken – also wohl gerade diejenigen, die eine Backup-App am dringendsten brauchen – war das nicht gut genug.

Was sich bei zehnfacher Größe ändert

Viele Abkürzungen, die bei 100.000 Dateien harmlos sind, werden bei einer Million zum Problem. Das Muster ist immer dasselbe: Ein Aufwand wächst unbemerkt mit der Bibliothek.

  • Alles im Speicher halten. Eine Liste mit 100.000 Einträgen passt bequem in den Arbeitsspeicher. Bei zehnfacher Größe, vervielfacht über Bildschirme und Caches, führt der Speicherdruck zu Rucklern und im schlimmsten Fall zu Abstürzen.
  • Jede Datei neu prüfen, obwohl sich nur wenige geändert haben. Die gesamte Bibliothek erneut zu untersuchen, weil eine Handvoll Fotos hinzugekommen ist, fällt bei 100.000 Dateien kaum auf. Bei einer Million kann das minutenlange Hintergrundarbeit ohne sichtbaren Nutzen bedeuten.
  • Den Bildschirm nach jeder Änderung aktualisieren. Eine Aktualisierung pro verarbeiteter Datei fällt in einer kleinen Bibliothek nicht auf. Wenn Änderungen zu Zehntausenden eintreffen, kann das die Oberfläche einfrieren.
  • Caches endlos wachsen lassen. Ein unbegrenzter Cache konkurriert irgendwann mit genau den Bildschirmen, die er beschleunigen sollte.

Das sind keine exotischen Fehler. Es sind gewöhnliche technische Entscheidungen, die eine Größenordnung später nicht mehr funktionieren.

Umbau für eine Million

Wir haben das Ziel auf eine Million Dateien angehoben und die App mit dieser Zahl als neuer Messlatte noch einmal durchgearbeitet. Einige Regeln prägen jetzt alles, was wir bauen:

  • Den Speicherverbrauch konstant halten, während die Bibliothek wächst. Die aufwendigsten Listenbildschirme laden Dateien jetzt abschnittsweise aus der Datenbank, statt alles im Speicher zu halten. Große Bild-Caches sind begrenzt und verwerfen ältere Einträge, statt endlos zu wachsen. Diese Umstellung geht Bildschirm für Bildschirm weiter; sie ist der Maßstab, nach dem wir jetzt entwickeln, keine Ziellinie, die wir überall schon überquert haben.
  • Vergleichen statt neu lesen. Scans erfassen, was sich geändert hat, statt alles neu zu verarbeiten. Wenn ein Cloud-Anbieter einen Änderungs-Feed anbietet, verwenden wir diese Änderungen, statt ganze Ordner erneut aufzulisten.
  • Die Oberfläche nie auf die Bibliothek warten lassen. Aufwendige Arbeit läuft im Hintergrund in Stapeln. Bildschirmaktualisierungen werden zusammengefasst, damit ein Schwall von 10.000 Änderungen nicht 10.000 Neuzeichnungen auslöst.
  • Auf echten Geräten mit echten Bibliotheken messen. Profiling hat das Raten ersetzt. Die größten Verbesserungen kamen von Stellen, die wir ohne Messung nie vermutet hätten.

Schnell ist eine Gewohnheit, kein Meilenstein

Die wichtigste Änderung war keine einzelne Korrektur. Es war, die Millionen-Dateien-Frage zu einem Teil davon zu machen, wie wir jede neue Funktion bewerten: Was passiert mit diesem Bildschirm, diesem Scan oder diesem Cache, wenn die Bibliothek zehnmal größer ist, als wir erwarten?

Irgendjemand wird jede Zahl überschreiten, die wir wählen, und diesmal wollen wir lieber vorbereitet sein.

Wenn Sie eine riesige Bibliothek haben, wurde diese Arbeit für Sie gemacht. Wenn sich SyncGallery mit Ihrer Sammlung jemals langsam anfühlt, sagen Sie es uns – echte Bibliotheken lehren uns mehr als synthetische Benchmarks.

SyncGallery

SyncGallery ausprobieren

Eine Galerie-App für Android mit Cloud-Synchronisierung, die Sie selbst steuern.

Jetzt bei Google Play
Mehr aus dem BlogNach oben