Od zespołu SyncGallery

Od 100 000 plików do miliona

Każda aplikacja ma liczbę, pod którą jej twórcy po cichu ją projektują. Naszą było 100 000 plików—dopóki nie pojawili się prawdziwi użytkownicy.

Galeria w telefonie rozrastająca się w ogromne pole uporządkowanych miniatur zdjęć

Cel, który wydawał się hojny

Gdy zaczynaliśmy budować SyncGallery, wybraliśmy jasny cel wydajnościowy: aplikacja miała działać szybko przy 100 000 plików multimedialnych na urządzeniu. Każdy algorytm pisaliśmy z myślą o tej liczbie i testowaliśmy na bibliotekach mniej więcej tej wielkości.

Wtedy 100 000 plików wydawało się hojnym zapasem. Przy 30 zdjęciach dziennie, każdego dnia, osiągnięcie tej liczby zajęłoby około dziewięciu lat. Byliśmy pewni, że nikt nie będzie trzymał na telefonie więcej.

Użytkownicy pokazali, że się myliliśmy

Wkrótce po pierwszym wydaniu przekonaliśmy się, jak bardzo błędne było to założenie. Prawdziwe biblioteki były znacznie większe niż nasz limit: lata archiwów z aparatu, zdjęcia przeniesione ze starszych telefonów i komputerów oraz całe rodzinne kolekcje przechowywane na dużych kartach pamięci. Wiele telefonów z Androidem nadal obsługuje karty pamięci 512 GB, a nawet 1 TB—to miejsce na biblioteki wielokrotnie większe niż nasz pierwotny cel.

Aplikacja nie przestała nagle działać przy pliku numer 100 001—limity wydajności rzadko są tak uprzejme. Zamiast tego operacje, które powinny być natychmiastowe, trwały zauważalnie dłużej, a wrażenia z użytkowania pogarszały się w miarę, jak biblioteka przekraczała cel. Dla osób z największymi bibliotekami—czyli, można powiedzieć, tych, którym aplikacja do kopii zapasowych jest najbardziej potrzebna—to nie było wystarczająco dobre.

Co się zmienia przy dziesięciokrotnie większej skali

Wiele skrótów, które są nieszkodliwe przy 100 000 plików, staje się problemem przy milionie. Schemat jest zawsze ten sam: jakiś koszt po cichu rośnie razem z biblioteką.

  • Trzymanie wszystkiego w pamięci. Lista 100 000 pozycji swobodnie mieści się w pamięci RAM. Przy dziesięciokrotnie większym rozmiarze, pomnożonym przez ekrany i pamięci podręczne, presja na pamięć powoduje zacinanie się, a w najgorszym razie awarie.
  • Ponowne sprawdzanie każdego pliku, gdy zmieniło się tylko kilka. Ponowne przeglądanie całej biblioteki, bo pojawiło się kilka zdjęć, jest ledwo zauważalne przy 100 000 plików. Przy milionie może oznaczać minuty pracy w tle bez widocznej korzyści.
  • Aktualizowanie ekranu po każdej zmianie. Jedna aktualizacja na każdy przetworzony plik jest niezauważalna w małej bibliotece. Gdy zmiany napływają dziesiątkami tysięcy, może to zamrozić interfejs.
  • Pozwalanie pamięciom podręcznym rosnąć bez końca. Nieograniczona pamięć podręczna w końcu zaczyna konkurować z ekranami, które miała przyspieszać.

To nie są egzotyczne błędy. To zwykłe decyzje inżynierskie, które przestają działać o jeden rząd wielkości później.

Przebudowa pod milion

Podnieśliśmy cel do miliona plików i przeszliśmy przez aplikację ponownie, traktując tę liczbę jako nową poprzeczkę. Kilka zasad kształtuje teraz wszystko, co budujemy:

  • Zużycie pamięci ma pozostawać stałe, gdy biblioteka rośnie. Najcięższe ekrany z listami wczytują teraz pliki z bazy danych porcjami, zamiast trzymać wszystko w pamięci. Duże pamięci podręczne obrazów są ograniczone, więc usuwają starsze wpisy, zamiast rosnąć bez końca. Wdrażamy to ekran po ekranie; to dyscyplina, według której teraz budujemy, a nie meta, którą wszędzie już osiągnęliśmy.
  • Porównuj zamiast czytać ponownie. Skanowania śledzą, co się zmieniło, zamiast przetwarzać wszystko od nowa. Gdy dostawca chmury udostępnia strumień zmian, korzystamy z tych zmian, zamiast ponownie wyświetlać listę całych folderów.
  • Interfejs nigdy nie czeka na bibliotekę. Ciężka praca odbywa się w tle, w partiach. Aktualizacje ekranu są łączone, więc seria 10 000 zmian nie wywołuje 10 000 odświeżeń.
  • Mierz na prawdziwych urządzeniach z prawdziwymi bibliotekami. Profilowanie zastąpiło zgadywanie. Największe zyski przyniosły miejsca, których bez pomiarów nigdy byśmy nie podejrzewali.

Szybkość to nawyk, a nie kamień milowy

Najważniejszą zmianą nie była żadna pojedyncza poprawka. Było nią włączenie pytania o milion plików do oceny każdej nowej funkcji: co stanie się z tym ekranem, skanowaniem lub pamięcią podręczną, gdy biblioteka będzie dziesięć razy większa, niż się spodziewamy?

Ktoś przekroczy każdą liczbę, jaką wybierzemy, a tym razem wolimy być na to gotowi.

Jeśli masz ogromną bibliotekę, ta praca powstała z myślą o Tobie. Jeśli SyncGallery kiedykolwiek będzie działać wolno z Twoją kolekcją, daj nam znać—prawdziwe biblioteki uczą nas więcej niż syntetyczne testy wydajności.

SyncGallery

Wypróbuj SyncGallery

Aplikacja galerii na Androida z synchronizacją z chmurą, nad którą masz kontrolę.

Pobierz z Google Play
Więcej na bloguPowrót na górę