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