Печалби:
- Като първо вземете профил и измерите истинското тясно място, като направите оптимизация въз основа на данни, а не на догадки, и изходът от профила се интерпретира от изкуствен интелект
- Възможност за насочване към най-скъпата операция по отношение на време за стартиране, плавност, памет и батерия и премахване на тежката работа от основната нишка
- Възможност за управление на цената на батерията и процесора на AI възможности като модел на устройството и извикване в облак чрез вземане на проби и пакетна обработка
Мобилните потребители са нетърпеливи. Ако приложението се отваря бавно, увисва при превъртане или бързо изтощава батерията, потребителят го изтрива и му дава оценка със звезди в магазина. Производителността и ефективността на батерията са въпрос на оцеляването на мобилното приложение; Това пряко засяга както удовлетворението на потребителите, така и класирането в магазина. AI е мощна помощ при откриване на тесни места в производителността (тесни места), интерпретиране на резултатите от измерванията и препоръчване на оптимизации. Но златното правило остава: първо измервайте, оптимизирайте по-късно. В този урок ще се научим да решаваме проблеми с производителността и батерията по начин, базиран на данни с AI. Особено важен въпрос е управлението на въздействието върху батерията и производителността на възможностите на AI, които добавихме в предишните единици (модел на устройството, обаждане в облак).
Оптимизиране без измерване
Най-голямата грешка на неопитен разработчик е предсказуемата оптимизация: губенето на време с думите „този трябва да е бавен“. Истинското тясно място почти винаги е на неочаквано място. Така че първо се взема профилът (профилиране — измерване коя част от приложението изразходва колко време/памет/батерия). Android Studio Profiler и Xcode Instruments са за тази работа. Предоставянето на данни от измерванията на AI ускорява интерпретацията; Но без измерване, казването на AI „моето приложение е бавно, ускорете го“ означава сляпо правене на прогнози.
Четирите основни оси на ефективност са:
ос
симптом
типична причина
Начален час
Приложението се отваря късно
Тежка работа по основната нишка
плавност (янк)
Свитъкът засяда
Дълга обработка, ненужно преначертаване в потребителския интерфейс
памет
подуване, колапс
Теч, голямо изображение, неконтролиран кеш
батерия/топлина
бърза еякулация
Непрекъснато местоположение, мрежа, сензор, фонова работа
Съвет: Когато питате AI за проблем с производителността, дайте изхода на профила (коя функция колко време отнема, графика на паметта). Твърди данни като „Тази функция отнема 30 ms на кадър“ позволява на AI да се фокусира върху истинското тясно място; Субективна фраза като „бавно“ дава общ и безполезен отговор.
Цената на батерията на способностите на AI
Функциите на AI, които добавихме в този модул, са мощни, но не са безплатни. Извличането на модел на устройството натоварва процесора и батерията; Постоянно работещо разпознаване на изображение (напр. камерата обработва всеки кадър) ще загрее телефона и ще изтощи батерията в рамките на минути. Обажданията с изкуствен интелект в облака, от друга страна, изяждат батерията, като поддържат мрежовото радио (антената, която изпраща и получава данни) включено през цялото време. Решения: стартирайте модела на устройството само когато е необходимо, пробвайте камерата няколко пъти в секунда вместо всеки кадър, групово изпращайте облачни заявки, извършвайте тежка работа, докато устройството се зарежда или е неактивно.
Внимание: Постоянно работеща AI функция (превод на живо, непрекъснато разпознаване на обекти) може да изтощи батерията много бързо, да загрее устройството и може да бъде ограничена от системата. Функция, която кара потребителя да чувства, че тази цена е изтрита. Винаги питам AI "как да направя тази функция удобна за батерията?" Също така задайте въпроса.
Стъпки на оптимизация
- Измерете. Намерете истинското тясно място с Profiler; не гадай.
- Изберете най-големия проблем. Не преследвайте 1% подобрение; Стремете се към най-скъпата сделка.
- Попитайте AI с данни. Поискайте предложение за оптимизация с извеждане на профила + подходящ код.
- Нанесете и измерете отново. Реално ли е подобрението? Падна ли номерът?
- Регресионен контрол. Оптимизацията счупи ли нещо? Повторете визуален и функционален тест.
три мини калъфа
Случай 1 — Търсене на грешното място. Един екип смята, че списъците са блокирани и преработва кода за превъртане седмици наред без резултат. Когато взеха профайлъра и подадоха данните към AI, се оказа, че истинското тясно място са изображенията, които се презареждат по мрежата с всеки ред. Когато беше добавен визуалният кеш, плавността се увеличи от 42 FPS на 60 FPS. Урок: измерването избягва седмици напразни усилия.
Случай 2 — Чудовищна характеристика на батерията. Приложение за превод добави превод на текст на живо с камера; Потребителите се оплакаха, че "телефонът се нагрява за 15 минути и 30% от батерията е изчезнала." Когато AI беше консултиран, беше установено, че камерата обработва 30 кадъра в секунда; Когато това беше намалено до 5 кадъра и резултатът беше актуализиран на няколко кадъра един от друг, консумацията на батерията намаля до една трета и качеството не беше забележимо. Урок: Винаги настройвайте AI с окото на батерията.
Случай 3 — Бавно начало. Приложението се отваряше за 4,5 секунди; 20% от потребителите излизаха при стартиране. Профилът показа, че цялата първоначална работа (анализ, зареждане на данни, подготовка на модела) е извършена последователно в основната нишка. С предложението за AI те бяха отложени и оставени на заден план; Времето за отваряне беше намалено до 1,3 секунди, а процентът на изоставяне беше наполовина. Урок: вършете само съществена работа в началото.
Слаба подкана / Силна подкана
Слаба подкана: „Моето приложение е бавно, ускорете го.“
Мощна подкана: „Превъртането на списъка се забива (изкривено) в моето приложение за Android. Данни за профилиране: bindImageView отнема 28 ms за всеки кадър, изображенията се зареждат от мрежата всеки път, няма кеш. Свързан код: [Код на адаптер за RecyclerView]. Препоръчайте 3-те най-ефективни оптимизации по реда на въздействие. Посочете очакваната печалба и възможните странични ефекти за всяка. Дайте приоритет на решения, които не намаляват качеството на изображението.“
Копируеми шаблони
Шаблон за анализ на тесни места: „Интерпретирайте следните данни от профила и намерете 3-те най-скъпи операции: [изход на профилиращия]. Предложете възможна причина и конкретна оптимизация за всяка. Първо дайте най-голямо въздействие.“
Шаблон за оптимизиране на батерията: „Тази функция изтощава батерията бързо: [функция, напр. постоянно местоположение]. Направете я удобна за батерията: - Намалете честотата на вземане на проби - Ограничение във фонов режим - Пакетна обработка - Изпълнявайте само когато е необходимо Сортирайте решения, без да нарушавате работата на потребителя. [код]"
Шаблон за ускоряване на стартиране: „Ускорете стартирането на приложението. Нещата, които се правят в момента при стартиране: [списък]. Кои могат да бъдат отложени, на заден план или заредени отложено? Отделете основните. [код]“
Шаблон за цена на AI функция: „Оценете производителността и цената на батерията на функцията [модел на устройството / повикване в облак], която добавих. Избройте показателите, които трябва да измеря, и стратегиите за намаляване на разходите. [код]“
Често срещани грешки
- Оптимизиране без измерване. Истинската пречка често е на различно място от предвиденото.
- Преследване на малки печалби. Стремете се към най-скъпото действие, а не към 1% подобрение.
- Пренебрегвайки цената на батерията на функциите на AI. Постоянно работещ модел/камера/мрежа изяжда батерията.
- Уморявам основната нишка. Тежкото вдигане на стартиране и превъртане не трябва да бъде върху нишката на потребителския интерфейс.
- Без повторно измерване след оптимизация. Проверете дали подобрението е реално и не нарушава нищо.
- Измерване на производителността в емулатора. Действителната скорост, температура и батерия на устройството са напълно различни.
В обобщение
Производителността и батерията са въпрос на оцеляване на мобилното приложение. Златното правило: първо измервайте, оптимизирайте по-късно. Предоставянето на профилни данни на AI ускорява интерпретацията; Безмерното желание за „ускоряване“ води до слепи догадки. Стремете се към най-скъпата сделка, не преследвайте малки печалби. Възможностите на AI, добавени в този модул, са мощни, но носят разходи за батерия и процесор; Управлявайте тези разходи, като намалите честотата на вземане на проби, групирането и стартирането само когато е необходимо. Измервайте отново на реалното устройство след всяка оптимизация.
Задача за приложение
Импортирайте профил в приложение (ваш собствен проект или пример) или създайте изходен примерен профил и го интерпретирайте от AI с „шаблон за анализ на тесни места“. Приложете оптимизацията с най-голямо въздействие и измерете отново: наистина ли числото спадна? Освен това оценете AI функция, която сте добавили в този модул (модел на устройството или облачно повикване) по отношение на батерията с „шаблон за цена на AI функция“ и определете поне една настройка, удобна за батерията.
контролен списък
- [ ] Имам профил преди оптимизацията, не съм предполагал
- [ ] Целих най-скъпата сделка, не се пръсках с малки печалби
- [ ] Дадох данните за профила на AI в конкретни числа
- [ ] Направих оценка на цената на батерията/процесора на функциите на AI
- [ ] Премахнах тежестта от основната нишка
- [ ] След оптимизацията измерих отново на реалното устройство и проверих регресията