Ад каманды SyncGallery

Ад 100 000 файлаў да мільёна

У кожнай праграмы ёсць лічба, пад якую яе распрацоўшчыкі ціха падладжваюць усё. Нашай было 100 000 файлаў — пакуль не з'явіліся рэальныя карыстальнікі.

Галерэя на тэлефоне, якая разгортваецца ў велізарнае поле ўпарадкаваных мініяцюр фота

Мэта, якая здавалася шчодрай

Калі мы пачыналі ствараць SyncGallery, мы выбралі дакладную мэту па хуткадзеянні: праграма павінна была заставацца хуткай пры 100 000 медыяфайлаў на прыладзе. Мы пісалі кожны алгарытм з улікам гэтай лічбы і тэсціравалі на бібліятэках прыкладна такога памеру.

Тады 100 000 файлаў здаваліся шчодрым запасам. Калі рабіць па 30 фота кожны дзень, дасягнуць такой колькасці можна прыкладна за дзевяць гадоў. Мы былі ўпэўнены, што ніхто не будзе захоўваць на тэлефоне больш.

Карыстальнікі даказалі, што мы памыляліся

Неўзабаве пасля першага выпуску мы зразумелі, наколькі памылковым было гэтае меркаванне. Рэальныя бібліятэкі аказаліся значна большымі за нашу мяжу: архівы камеры за гады, фота, перанесеныя са старых тэлефонаў і камп'ютараў, і цэлыя сямейныя калекцыі на вялікіх картах памяці. Многія тэлефоны на Android дагэтуль падтрымліваюць карты памяці на 512 ГБ і нават 1 ТБ — гэта месца для бібліятэк, у шмат разоў большых за нашу першапачатковую мэту.

Праграма не ламалася раптоўна на 100 001-м файле — межы хуткадзеяння рэдка бываюць такімі ветлівымі. Замест гэтага аперацыі, якія павінны адчувацца імгненнымі, займалі прыкметна больш часу, і праца станавілася ўсё горшай па меры таго, як бібліятэка перарастала мэту. Для людзей з самымі вялікімі бібліятэкамі — а ім, напэўна, праграма для рэзервовага капіравання патрэбная больш за ўсіх — гэтага было недастаткова.

Што мяняецца пры дзесяціразовым маштабе

Многія спрашчэнні, бясшкодныя пры 100 000 файлаў, становяцца праблемамі пры мільёне. Заканамернасць заўсёды адна: нейкі кошт непрыкметна расце разам з бібліятэкай.

  • Трымаць усё ў памяці. Спіс са 100 000 запісаў спакойна змяшчаецца ў аператыўнай памяці. Калі ён у дзесяць разоў большы і памножаны на колькасць экранаў і кэшаў, нагрузка на памяць выклікае падтармажванні, а ў горшым выпадку — збоі.
  • Пераправяраць кожны файл, калі змяніліся толькі некалькі. Паўторная праверка ўсёй бібліятэкі з-за некалькіх новых фота амаль непрыкметная пры 100 000 файлаў. Пры мільёне гэта можа азначаць хвіліны фонавай працы без бачнай карысці.
  • Абнаўляць экран пасля кожнай змены. Адно абнаўленне на кожны апрацаваны файл непрыкметнае ў невялікай бібліятэцы. Калі змены прыходзяць дзясяткамі тысяч, гэта можа замарозіць інтэрфейс.
  • Дазваляць кэшам расці бясконца. Неабмежаваны кэш у рэшце рэшт пачынае канкураваць з экранамі, якія павінен быў паскараць.

Гэта не экзатычныя памылкі. Гэта звычайныя інжынерныя рашэнні, якія перастаюць працаваць на парадак пазней.

Перабудова пад мільён

Мы паднялі мэту да мільёна файлаў і зноў прайшлі па ўсёй праграме, выкарыстоўваючы гэтую лічбу як новую планку. Цяпер некалькі правілаў вызначаюць усё, што мы ствараем:

  • Утрымліваць выкарыстанне памяці нязменным па меры росту бібліятэкі. Самыя цяжкія экраны са спісамі цяпер загружаюць файлы з базы даных порцыямі, а не трымаюць усё ў памяці. Вялікія кэшы відарысаў абмежаваны, таму яны выцясняюць старыя запісы, а не растуць бясконца. Гэта ўкараняецца экран за экранам; гэта дысцыпліна, якой мы цяпер прытрымліваемся, а не фінішная рыса, якую мы ўжо ўсюды перасеклі.
  • Параўноўваць, а не перачытваць. Сканаванні адсочваюць, што змянілася, а не апрацоўваюць усё нанова. Калі воблачны правайдар прапануе стужку змен, мы выкарыстоўваем гэтыя змены, а не пералічваем цэлыя папкі зноў.
  • Ніколі не прымушаць інтэрфейс чакаць бібліятэку. Цяжкая праца выконваецца ў фоне пакетамі. Абнаўленні экрана аб'ядноўваюцца, таму ўсплёск з 10 000 змен не выклікае 10 000 перамалёвак.
  • Вымяраць на рэальных прыладах з рэальнымі бібліятэкамі. Прафіляванне замяніла здагадкі. Найбольшы выйгрыш далі месцы, пра якія мы ніколі б не падумалі без вымярэнняў.

Хуткасць — гэта звычка, а не этап

Самай важнай зменай стала не якое-небудзь асобнае выпраўленне. Важней было зрабіць пытанне пра мільён файлаў часткай ацэнкі кожнай новай функцыі: што адбудзецца з гэтым экранам, сканаваннем або кэшам, калі бібліятэка будзе ў дзесяць разоў большай, чым мы чакаем?

Нехта ўсё роўна перасягне любую лічбу, якую мы выберам, і на гэты раз мы хочам быць гатовымі.

Калі ў вас велізарная бібліятэка, гэтая праца зроблена для вас. Калі SyncGallery калі-небудзь запавольваецца з вашай калекцыяй, напішыце нам — рэальныя бібліятэкі вучаць нас большаму, чым сінтэтычныя тэсты.

SyncGallery

Паспрабуйце SyncGallery

Галерэя для Android з воблачнай сінхранізацыяй, якой кіруеце вы.

Спампаваць у Google Play
Яшчэ з блогаУверх