Инженерски обновление

Снимка-изследовател, Констелация и по-бърз Mapsake

Двама амбициозни функции за снимки изложиха същия въпрос: може ли Mapsake да извършва значително повече работа без да се забавя? Нов набор от тестове и устройства превърна отговора в измерена инженерска работа.

От 13 минута за четене.
Mapsake Photo Explorer с филтри, колекции, контроли за карта и времева линия и резултати със снимки от пътувания

Пускане на нова функционалност и техническо обновяване.

Това обновление представя два от най-амбициозните къмпании с къмпании на Mapsake: Преглед на снимки, което прави голяма, картографирана библиотека лесно търсеща и Съзвездия, което открива визуални връзки между отдалечени места.

Това включва също най-незабележимата функция в издаването: постоянен набор от тестове за производителност. Този набор веднага намери най-бавните общо използвани пътища, направи корекциите измерими и даде на приложението начин да разпознава, кога бъдещата работа ще ги направи по-бавни отново.

Резултатът не е просто повече възможности. Mapsake е значително по-бърз в преобразуването на големи фотохранилища в места, намирането на близки градове и планирането на констелацията на небето.

Снимка-изследовател търси пътуванията във файла, а не в кamerата

Фото-Изследвач започва с компактната метаданна, която Mapsake вече поддържа за картографираните снимки. Това включва местоположението, датата, източника, камерата, бележките, височината, скоростта, избрани, снимки, редакции и организацията, добавена вътре в приложението.

Индексът остава на устройството. Търсенето може да бъде директно (Япония, 2024, iPhone, обичайни) или изразено по-естествено, например „обичайни снимки от Италия отминалия година.“ Слойът за заявки превръща поддържан език в структуриран набор от филтри, докато детерминистичният синтаксис и корекция на грешки осигуряват надежден резерв.

Търсенето е само една пътека към библиотеката. Колекциите откриват полезни групи без да се пише; Map Area ограничава резултатите географски; Timeline групира по дата; запазените и новите търсения правят повтарящи се въпроси по-евтини. Студии, оценки, етикети, бележки и бележки се намират в локален съседен файл, така че организирането на снимка не променя или качва оригиналната.

Важната архитектурна избор е, че всеки инструмент споделя същия индексиран преглед. Колекции, времеви интервали, карта и текстово търсене не са поотделно изградени от нула 82,000-фото светове.

Индексът е извличан, докато личната организация е устойчива.

Фото-Изследвач се нуждаеше от два вида съхранение с много различни животни. Полета като имената на местата, годината на снимане, камерата, височината и източника могат да се създадат от метаданната, която вече има Mapsake. Съответствие, частна бележка, оценка, етикет или цвят е написан от човек и не може да се счита за временно кеширано данно.

Mapsake затова запазва потребителския организиран преглед в малък резервируем файл. По-големият индекс за търсене живее в Caches, съдържа без изображения, е изключен от резервната копие и може да се регенерира всяко време, когато схемата му се промени. Повторно сканиране на библиотека или изтриване на производни данни не изтрива работата, която някой е вложил в организирането ѝ.

Това разделяне също направи резервните копия по-често. Потърсете без загуба JSON и HTML резервни копия, които могат да носят бележки и организация, но те не тихо се разрастват в архиви с фото. Анотациите в Apple Photos запазват стабилен iCloud идентификатор с най-добри усилия, така че възстановеният резервен копие може да се върне към локалната копия на друг Apple устройство; идентификаторите на имейджите в Immich са стабилни от източника си.

Първият пълен стрес тест произвежда компресиран индекс от около 12.4 MB за 82,000 снимки. Хладен географски изграждане отнема 2.61 секунди на разработчикската симулация, по-късно възстановяване от диска отнема 1.20 секунди, генерираните колекции отнемат 126 милисекунди и дневното време на модела отнема 211 милисекунди. Тези числа дават на всяка част от функционалността си бюджет, вместо да скрие всичко зад един обобщен „търсене“ измерване.

Фото-Изследвач също обяснява защо елементът съвпада. Резултатът може да каже, че е съвпаднал с Кийото, 2024, iPhone камера, частна бележка или избран филтър. Това малко ред е важно, когато заявка комбинира естествен език с няколко точни контроли: потребителят никога не трябва да предполага какво е мислил търсачът.

Търсенето е интерфейс, а не лиценз за импровизиране.

Всички поддържани заявки в крайна инстанция стават валидна структура на филтри. Пътят директно разпознава места, дати, източници, модели на камери, бележки, предпочитания, оценки, етикети, височина, скорост, снимки и редактирани снимки. Ограничен коректор на граматиката може да поправи думи, които изразяват намерение и известна индексирана лексика, но не може да преработва произволни приватни бележки.

На устройства, които поддържат Apple Foundation Models, текстът, подаден за обработка, може също да бъде интерпретиран в същата ограничена структура. Само въпросът и текущият година се предоставят на този системен модел. Пиксели от снимките, индекси от метаданни, бележки за местоположение и лична организация никога не се предоставят. Невалидни диапазони и неизвестни стойности се отхвърлят, а детерминистичният парсър остава като резервно решение.

Интерфейсът показва интерпретацията и предлага път обратно към оригиналните думи. Това е място, където умността е полезна само когато остава проверяема. „Снимки над 3,000 метра отминалия година“ трябва да изглежда естествено, но трябва да се държи като точен набор от филтри.

Constellations търси повторение през разстояние

Тогава & Сега се питаме дали някой е върнал се в същото място. Констелации се питаме почти обратното въпрос: какви визуални идеи са повтаряли в места, много отдалечени?

Индексът на устройството извлича компактно множество визуални сигнали и мотиви от подходящи пътувания снимки. Планираният търси характеристики, които са специфични за една изображение, а не просто общи навсякъде, след това свързва кандидати между различни места. Врати, ръбове, хоризонти, форми на планински върхове, цвят, сезони и композиция могат да станат възможностите на нито.

Тези нишки са подредени в триизмерен небесен свят. Потребителят може да се движи около него, да отвори констелация, да приеме или отхвърли връзка и да играе филм със съществени снимки, в който свързаните снимки се разтварят от едно място в друго. Карти и релс използват същите запазени данни за нишки.

Извличането и планирането на работа се случва в устройството. Mapsake не изпраща транспортна библиотека към услуга за анализ на снимки. Фонови групи могат да дълбочат индекса с течение на времето, без първото стартиране да чака цялата библиотека.

Визуалният индекс е проектиран да бъде променен евтин.

За всеки подходящ представител, Mapsake извършва една малка декодиране на снимката и извлича няколко сигнала: визуална характеристика, описанието на класификатора, компактна палитра на цветовете и лек клас, оценен от местоположението, времето и височината на слънцето. Характеристиката е малко числово описание, използвано за сходство; тя не е копие на снимката и не може да се покаже като такава.

Индексът съхранява директни идентификатори на класификатори, вместо да ги замества веднага с визуални мотиви. Това решение се оказа полезно по време на реални тестове на библиотека. Първият списък с мотиви включваше етикети, които звучаха разумно, но не бяха наистина налични в поддържаната таксономия на Vision. Тъй като директните етикети все още бяха достъпни, възстановяването на „Сгради и мостове“, „Водни превозни средства и пристанища“ и по-късно групи мотиви беше бързо оценяване, а не друга преглед на хиляди оригинални снимки.

Индексирането започва с представителни снимки, а не чрез четене на библиотеката строго от нови към старите. Снимките се групират в приблизителни клетки на места и дни на места, с предпочтение към полезни статични снимки и разстояние между серията. Планираният след това се движи между места в кръг. Това дава млад индекс географска широчина, докато задените групи постепенно добавят дълбочина.

Първата версия избра една снимка на място за всяка рунда. Реални данни от устройство разкриха грешката: повечето места оставаха под трите минимални снимки, използвани от движението на нишка, така че хиляди индексирани активи все още можеха да произведат нулеви кандидати. Разделянето на всяка рунда на три представители направи индекса полезен по-рано, без да увеличи общия му бюджет. Това е точно причината, поради която синтетичните фиксери и реална, хаотична библиотека са важни.

Извличането работи в серийни групи, комита прогреса атомарно, пауза за топлост, и пропуска фоново извличане в режим на ниско енергийно използване. Фото на Apple, които са вече в устройството, се опитват първо; снимки само от iCloud могат да чакат по-късно разрешение за мрежа. Immich използва същия визуален поток през съществуващия клиент за миниатюри.

Само сходство не прави история

Разстояние, определено от визуална прилика, може да намери две визуално подобни снимки, но Constellations е предназначено да намира връзка между места, а не да открива дубликати. Кандидатските снимки трябва да принадлежат на дестинации, които са на поне 150 километра една от друга. Двигателят също така взема предвид отличителни мотиви, необичайна светлина, сезон и повтарящи се календарни ритуали, преди да приеме връзка.

"Изразителност" стана трудна част. Ранен модел на оценка награждава сигнали, които съществуват в двете места. В библиотеката за разработка това произвежда стотици връзки, доминирани от нощта и общи сезони. Тези сигнали бяха технически общо, но не и далече изненадващи. Сега двигателят оценява вдигането: сигналът е важен, когато е необичайно силен в двете места, в сравнение с библиотеката на дадената персона като цяло.

Това промени въпроса от „Има ли нощни снимки в двете места?“ към „Дали двете места са необичайно нощно-насыщени за тази библиотека?“ Общи сигнали изчезват в фоновия план, докато повтарящи се снимки на синия час, врати, пристанища, зимно осветление или повторяваща се кратка празнична седмица могат да стават значими.

Визуални кандидати използват няколко представители за място вместо едно щастливо двойка. Идентификаторите на връзките се извличат от техните места и семейства, така че същата връзка запазва идентичността си след повторна оценка. Съхранени, отхвърлени и видени състояния се запазват при настройки, и отхвърлената връзка не се появява отново просто защото моторът е изпълнил отново.

Разположението на небето е също предварително изчислено и детерминирано. Географските позиции задават възелите, силата на връзката привлича свързаните места към едно друго, а малък зададен шум предотвратява точни пресичания. Живият интерфейс може да анимира между географията, подобна на Земята, и завършената констелация с едно стойност на преминаване; той не изпълнява източник-на-акумулаторна физика-симулация на всеки кадър.

Match-cut киното използва Vision вниманието на салиентността, за да разположи гладкото движение на камерата около важната част на всяка примерна. Вратата се разтваря към друга врата вместо да се свържат два центъра на изображенията без намеса. Reduce Motion премахва дрейфуващото движение и намалява преминаването, докато централното изрязване остава грациозен падък, когато салиентността не е налична.

Защо да създадем набор от стандарти сега?

Голямата библиотека по производителност беше достигнала точка, където интуицията вече не е достатъчна. Смена може да направи една екран да изглежда по-бързо, докато тихо прави импорти, спомени или Констелации по-бавно, защото всички зависят от същите географски и фото пайпи линии.

Новата серия има два пътя:

  • Логически път изпълнява детерминирани двигатели за функции срещу малки, средни и стресови фиксации, включително 82,000-фото ниво, базирано на най-големия реален доклад, наличен по време на разработката.
  • Полето на потребителския интерфейс показва примерни екрани, докато собствената система за измерване на производителността на Mapsake записва времето за изпълнение, грешки и памет.

Бенчмаркът използва оптимизация при пускане с възможност за тестване. Debug-изграждането е изключено с намерение, защото неоптимизиран Swift произвежда числа, които не са релевантни за приложението. Резултатите от симулатора и физическото устройство също съхраняват отделни базови линии, така че различни устройства никога не се сравняват като еднакви околнosti.

Комплектът покрива газетата, картата геометрия, импорти, метаданните на снимките, постиженията, Паспорта, Друзелите, резервни копия, печати, Констелации, спомени и Снимачкият изследовател. Живи мрежи, качество на камерата, системно преброяване на снимки и CloudKit остават интеграционни тестове, защото притежаването, че тези входни данни са детерминирани, ще направи резултатите по-малко искрени.

Бенчмаркът може уверено да бъде грешен.

Създаването на комплекта изисква повече от обвиване на часовника около кода на приложението. Първият фикс за извод използва обикновено хеширане за избор на координати; Swift умишлено размества това хеширане между процеси, което променя геометрията на работата с приблизително 30 процент от една изпълнение към друга. Фиксите сега използват фиксиран генератор, и комплектът валидира генерираната форма преди да приеме резултат.

Друг ранен сценарий, наречен import.merge, измери нови вмъкнати. Пътя, който беше предназначен да представи, беше идемпотентен мерж във съществуващ атлас. Бенчмаркът беше бърз и повтаряем, но тестваше грешното нещо. Корекцията на фиксирания промени основата преди всяка оптимизация.

Измеренията на интерфейса имаха подобен капан. Счетоводните показатели се натрупваха от стартиране, така че жестът на интерфейса можеше да наследи проблеми от анимацията при стартиране и да изглежда по-бавно, отколкото беше. Всеки интерактивен момент сега изчиства преди жеста снимка, след което своят контекст се сваля само в рамките на този сценарий.

Изпълнението на околната среда, операционната система, класа на уреда, версията и термичното състояние. Резултатът от имитатора никога не се промовира над базовото състояние на апарата. Ненормалните термични изпълнения остават полезни диагностични, но се бележат вместо да провалят вратата за регресия. Регресията трябва да надмине както относителен праг, така и малък абсолютен минимум, така че шумът под милисекундата да не стане лъжа на криза.

Тези подробности не са бюрократия около стандартния показател. Те са това, което прави числото стойност за действие.

Проверката за точност намери реална географска грешка

Най-ценният тест в първия изпълнителен цикъл не измерваше скоростта. Той сравняваше оптимизираната фото-в-место производна с намерено проста замръзнала референция в координати с голям брой границы.

Това защита е провалила се преди оптимизацията да е променила двигателя. Снимките вътре в пресичащи се административни полигона (Берлин в Бранденбург, Сеул в Геонги и Киев град в неговата окръжност) могат да бъдат определени според случайния итерационен ред на речника. Същата координата може да се разреши по-различно след пускане.

Двете референчни и продукционни двигатели сега подреждат пресичащите кандидати по площ на полигон, което позволява на най-специфичната административна функция да победи детерминистично. Само след като 82,000 -фото произведоха нула разлики, с високи и ниски пъти съгласни, стават пространствените кратки пътища приемливи.

Това е тихата сила на инженерството за производителност с проверки за еквивалентност: то може да разкрие проблем с коректността, който нормалната работа по времето никога няма да види.

Какво промениха първите измервания

Първият стрес тест разкри няколко общо присъстващи ограничения. Първата оптимизационна фаза добави индексирано геометрично тестване, постоянен географски клетка кеш, меморизирано разрешаване на места, общо фото-наблюдения и инкрементални актуализации на Atlas-маркировки.

На симулатора, студен извод от 82,000-фото карта падна от 34.5 секунди до 8.0 секунди.. Общ път след промяна на филтър или отваряне на Места се възстанови. 2.8 секунди. Планирането на съзвездия на нивото на снимките на 10,000 може да е променено. 3.3 секунди до 0.9 секунди.. Времето за превключване на табовете намаля с 31 процента, а времето за превключване на страниците на Passport намаля с 47 процента.

Следващият цикъл замени повтарящите се сканиране на ширината на SQLite-точките с ленив, ширината на сортиране на най-близкото градово индекс и ограничен записен кеш. В бенчмарк-изпита на симулатора, среден най-близък граден пакет падна 2.11 секунди до 5.2 милисекунди.. На физически iPhone, същият споделен двигател падна. 3.06 секунди до 6.35 милисекунди., докато планирането на съзвездия от снимки беше премахнато. 5.60 секунди до 65.9 милисекунди.

Този втори преминаване също премести извличането на 82,000-фото от 7.96 секунди до около 1.00 секунда на симулатора, с топене при 984 милисекунди. Повишенията се натрупват, защото търсенето на най-близкия град е под импортирането, Then & Now, картен извод и Constellations, а не част от една екранна секция.

Тези са контролирани стандартизирани работни натоварвания, а не обещание, че всеки устройство или библиотека ще произведе същото число. Тяхната стойност е сравнителност: фиксирана инсталация, записано термично състояние, фиксиран резултат и врати, които могат да маркират значима регресия.

Бързо, защото работата стана по-възможно за повторно използване

Най-големите успехи не са дошли от премахване на функции или добавяне на спътник за зареждане. Те са дошли от спиране на повтаряща се работа:

  • Геометрията на региона сега намалява броя на кандидат-полигоните преди скъпите тестове на точки.
  • Географски кеш на клетки, свързан с версията на компилацията, запомня разрешените области през различните изпълнения.
  • Търсенето на най-близкия град използва числово пространствено индексиране вместо да се изгради нова сортиране на базата данни за всяка координата
  • Повърхности, насочени към снимки, споделят една непроменена филтрирана снимка.
  • Пинове и флагове на Atlas се актуализират по идентификатор, а не чрез премахване и възстановяване на всичко.

Фото-Изследвач и Констелации се получават, защото се намират върху тези същите основи. Така са и импортите, Следващо & Сега, данни картите и историята на мястото.

Кодът за сравнение е изключен от архивите на App Store, но традицията остава в репозитория: изпълнете серията около промени в топ път, сравнете с правилната основа и запазете резултатите. Производителността сега е нещо, което проектът може да тества, а не просто нещо, което може да надеждава да забележи.

Числата също запазват незавършената работа. Потърсеният физически интерфейс достигна сериозно топло състояние и все още записа голям пик на паметта за цикъл на таба и почти секунда от време на спиране при отварянето на Констелации срещу реалната библиотека. Тези измервания са диагностични, а не чиста регресивна сравнение, но да ги оставим видими е по-полезно, отколкото да обявим приложението „извършено.“

Какво общо имат тези три проекти

Снимка-изследовател, Констелация и стандартната група всички започнаха със същото ограничение: голям пътуванияр трябва да стане по-полезен без да напуска устройството или да прави останалата част от приложението по-тежка.

Снимка-изследовател превръща известната метаданта във въпроси и колекции. Констелацията превръща представителните изображения визуална история. Стандартната група прави и двете отговорни към общите двигатели под тях.

Това функция е видима в резултат на търсене, в нощно небе и в съчетание. Техническата работа е видима предимно в това, което не се случва: стартирането не изчаква всички 82,000 снимки, филтърът не възстановява пет пълни копия на същия масив, а бързото пространствено индексиране не променя тихо коя градина снимката принадлежи.

Това е насоката, която искам да приеме работата по производителност в Mapsake. Скоростта не е фаза на почистване след амбициозни идеи. Това е едно от инструментите, които правят тези идеи безопасни за запазване.

Иконата на приложението Mapsake

Самостоятелен разработчик на Mapsake, писан от продукта, картата, приватността и работата по Apple-платформата зад приложението.

Създайте вашия атлас

Начнете със историята си от пътуванията, която вече имате

Mapsake е безплатна, изисква без Mapsake акаунт за основна употреба и запазва поддържаните съпоставки на снимки на устройството.

Получете Mapsake безплатно