zisky:
- Najprv urobte profil a zmerajte skutočné úzke miesto, urobte optimalizáciu založenú skôr na údajoch než na dohadoch a výstup profilu necháte interpretovať umelou inteligenciou
- Schopnosť zamerať sa na najdrahšiu operáciu z hľadiska času spustenia, plynulosti, pamäte a batérie a odstrániť náročnú prácu z hlavného vlákna
- Schopnosť riadiť náklady na batériu a procesor funkcií AI, ako je model na zariadení a cloudové volanie prostredníctvom vzorkovania a dávkového spracovania
Používatelia mobilných zariadení sú netrpezliví. Ak sa aplikácia otvára pomaly, visí pri posúvaní alebo rýchlo vybíja batériu, používateľ ju vymaže a v obchode ju ohodnotí hviezdičkami. Výkon a účinnosť batérie sú otázkou prežitia mobilnej aplikácie; Priamo ovplyvňuje spokojnosť používateľov aj hodnotenie obchodu. AI je silným pomocníkom pri zisťovaní úzkych miest výkonu (úzkych miest), interpretácii výsledkov meraní a odporúčaní optimalizácií. Zlaté pravidlo však zostáva: najprv merať, neskôr optimalizovať. V tejto lekcii sa naučíme riešiť problémy s výkonom a batériou dátovým spôsobom pomocou AI. Obzvlášť dôležitou otázkou je riadenie vplyvu na batériu a výkon schopností AI, ktoré sme pridali v predchádzajúcich jednotkách (model na zariadení, volanie v cloude).
Optimalizácia bez merania
Najväčšou chybou neskúseného vývojára je prediktívna optimalizácia: strácať čas hovorením „toto musí byť pomalé“. Skutočná prekážka je takmer vždy na neočakávanom mieste. Najprv sa teda urobí profil (profilovanie — meranie, ktorá časť aplikácie spotrebuje koľko času/pamäte/batérie). Android Studio Profiler a Xcode Instruments sú pre túto prácu. Poskytnutie nameraných údajov AI urýchľuje interpretáciu; Ale bez merania povedať AI „moja aplikácia je pomalá, zrýchlite ju“ znamená slepo robiť predpovede.
Štyri hlavné osi výkonnosti sú:
os
symptóm
typická príčina
Čas začiatku
Aplikácia sa otvorí neskoro
Ťažká práca na hlavnom vlákne
plynulosť (jank)
Posúvanie sa zasekne
Dlhé spracovanie, zbytočné prekresľovanie vo vlákne používateľského rozhrania
pamäť
opuch, kolaps
Únik, veľký obrázok, vyrovnávacia pamäť nekontrolovaná
batéria/teplo
rýchla ejakulácia
Nepretržité umiestnenie, sieť, snímač, úloha na pozadí
Tip: Keď sa pýtate AI na problém s výkonom, uveďte výstup profilu (ktorá funkcia trvá ako dlho, graf pamäte). Tvrdé údaje ako „Táto funkcia trvá 30 ms na snímku“ umožňujú AI zamerať sa na skutočné úzke miesto; Subjektívna fráza ako „pomaly“ vytvára všeobecnú a zbytočnú odpoveď.
Cena batérie schopností AI
Funkcie AI, ktoré sme pridali do tohto modulu, sú výkonné, ale nie sú zadarmo. Extrakcia modelu na zariadení zaťažuje procesor a batériu; Neustále prebiehajúce rozpoznávanie obrázkov (napr. kamera spracováva každú snímku) zahreje telefón a vybije batériu v priebehu niekoľkých minút. Na druhej strane cloudové AI hovory vybíjajú batériu tým, že sieťové rádio (anténa, ktorá odosiela a prijíma dáta) je neustále zapnuté. Riešenia: spúšťajte model na zariadení iba vtedy, keď je to potrebné, snímajte kameru niekoľkokrát za sekundu namiesto každej snímky, hromadne odosielajte cloudové požiadavky, robte ťažké práce počas nabíjania alebo nečinnosti zariadenia.
Upozornenie: Neustále spustená funkcia AI (živý preklad, nepretržité rozpoznávanie objektov) môže veľmi rýchlo vybiť batériu, zahriať zariadenie a môže byť škrtené systémom. Funkcia, vďaka ktorej má používateľ pocit, že tieto náklady sú odstránené. Vždy sa AI pýtam: „Ako urobím túto funkciu priateľskou k batérii?“ Tiež si položte otázku.
Kroky optimalizácie
- Zmerajte. Nájdite skutočnú prekážku s Profilerom; nehádajte sa.
- Vyberte si najväčší problém. Nenaháňajte 1% zlepšenie; Zamerajte sa na najdrahšiu transakciu.
- Opýtajte sa AI s údajmi. Požiadajte o návrh optimalizácie s výstupom profilu + príslušný kód.
- Naneste a znova zmerajte. Je zlepšenie skutočné? Znížil sa počet?
- Regresná kontrola. Zlomila optimalizácia niečo? Zopakujte vizuálne a funkčné testovanie.
tri mini prípady
Prípad 1 – Hľadanie na nesprávnom mieste. Jeden tím si myslel, že zoznamy sú zaseknuté a prerábal rolovací kód celé týždne bezvýsledne. Keď vzali profiler a odovzdali údaje AI, ukázalo sa, že skutočným prekážkou boli obrázky, ktoré sa znova načítali cez sieť s každým riadkom. Po pridaní vizuálnej vyrovnávacej pamäte sa plynulosť zvýšila zo 42 FPS na 60 FPS. Ponaučenie: meranie sa vyhne týždňom márneho úsilia.
Prípad 2 – Funkcia batériového monštra. Prekladateľská aplikácia pridala živý preklad textu s fotoaparátom; Používatelia sa sťažovali, že „telefón sa zahrial za 15 minút a vybilo sa 30 % batérie“. Pri konzultácii s AI sa zistilo, že kamera spracováva 30 snímok za sekundu; Keď sa to znížilo na 5 snímok a výsledok sa aktualizoval o niekoľko snímok, spotreba batérie klesla na jednu tretinu a kvalita nebola viditeľná. Lekcia: Vždy nastavte AI pomocou oka batérie.
Prípad 3 – Pomalý nástup. Aplikácia sa otvárala za 4,5 sekundy; 20 % používateľov odchádzalo pri spustení. Profil ukázal, že všetky počiatočné práce (analytika, načítanie údajov, príprava modelu) sa vykonávali postupne na hlavnom vlákne. S návrhom AI boli tieto odložené a odsunuté na druhú koľaj; Čas otvorenia sa skrátil na 1,3 sekundy a miera opustenia sa znížila na polovicu. Ponaučenie: na začiatku robte len nevyhnutnú prácu.
Slabá výzva / Silná výzva
Slabá výzva: „Moja aplikácia je pomalá, zrýchlite ju.“
Výkonná výzva: "Posúvanie zoznamu sa zasekne (zasekne) v mojej aplikácii pre Android. Údaje profilu: bindImageView trvá 28 ms na každej snímke, obrázky sa zakaždým načítajú zo siete, neexistuje žiadna vyrovnávacia pamäť. Súvisiaci kód: [Kód adaptéra RecyclerView]. Odporučte 3 najefektívnejšie optimalizácie v poradí vplyvu. Uveďte očakávaný zisk a možné vedľajšie účinky, ktoré neznižujú kvalitu obrázkov.
Kopírovateľné šablóny
Šablóna analýzy úzkych miest: "Interpretujte nasledujúce údaje o profile a nájdite 3 najdrahšie operácie: [výstup z profilu]. Navrhnite možnú príčinu a konkrétnu optimalizáciu pre každú z nich. Najprv uveďte čo najväčší účinok."
Šablóna optimalizácie batérie:"Táto funkcia rýchlo vybíja batériu: [funkcia, napr. trvalé umiestnenie]. Upravte ju tak, aby bola vhodná pre batériu:- Znížte vzorkovaciu frekvenciu- Obmedzenie na pozadí- Dávkové spracovanie- Spúšťajte len v prípade potreby Zoraďte riešenia bez narušenia používateľského prostredia. [kód]“
Šablóna na zrýchlenie spustenia: "Zrýchlite spustenie aplikácie. Akcie, ktoré sa momentálne robia pri spustení: [zoznam]. Ktoré môžu byť odložené, stiahnuté na pozadí alebo načítané lenivo? Oddeľte tie podstatné. [kód]"
Šablóna ceny funkcie AI: „Vyhodnoťte výkon a náklady na batériu funkcie [model na zariadení / cloudové volanie], ktorú som pridal. Uveďte metriky, ktoré by som mal merať, a stratégie na zníženie nákladov. [kód]“
Časté chyby
- Optimalizácia bez merania. Skutočná prekážka je často na inom mieste, ako sa predpokladalo.
- Naháňanie malých ziskov. Zamerajte sa skôr na najdrahšiu akciu než na zlepšenie o 1 %.
- Ignorovanie nákladov na batériu funkcií AI. Neustále spustený model/kamera/sieť vybíja batériu.
- Unavuje hlavné vlákno. Ťažké zdvíhanie spúšťania a posúvania by nemalo byť na vlákne používateľského rozhrania.
- Po optimalizácii sa nepremeriava. Overte si, že zlepšenie je skutočné a nič nezlomí.
- Meranie výkonu v emulátore. Skutočná rýchlosť zariadenia, teplota a batéria sú úplne odlišné.
V súhrne
Výkon a batéria sú otázkou prežitia mobilnej aplikácie. Zlaté pravidlo: najprv merať, neskôr optimalizovať. Poskytnutie údajov profilu AI urýchľuje interpretáciu; Nezmerná túžba „zrýchliť“ vedie k slepým dohadom. Zamerajte sa na najdrahšiu transakciu, nežeňte sa za malými ziskami. Funkcie AI pridané v tomto module sú výkonné, ale nesú náklady na batériu a procesor; Spravujte tieto náklady znížením frekvencie vzorkovania, dávkovania a spúšťania iba v prípade potreby. Po každej optimalizácii znova zmerajte na skutočnom zariadení.
Aplikačná úloha
Importujte profil do aplikácie (svoj vlastný projekt alebo príklad) alebo vytvorte vzorový výstup profilu a nechajte ho interpretovať AI pomocou „šablóny analýzy úzkeho miesta“. Použiť optimalizáciu s najvyšším dopadom a znova zmerať: skutočne kleslo číslo? Vyhodnoťte tiež funkciu umelej inteligencie, ktorú ste pridali v tomto module (model na zariadení alebo volanie v cloude), z hľadiska batérie pomocou „šablóny nákladov na funkcie AI“ a určite aspoň jedno nastavenie vhodné pre batériu.
kontrolný zoznam
- [ ] Profil som dostal pred optimalizáciou, neuhádol som
- [ ] Mieril som na najdrahší obchod, nerozhadzoval som sa na malých ziskoch
- [ ] Údaje o profile AI som uviedol v konkrétnych číslach
- [ ] Hodnotil som náklady na batériu/procesor funkcií AI
- [ ] Odstránil som ťažké zdvíhanie z hlavného vlákna
- [ ] Po optimalizácii som znova zmeral na skutočnom zariadení a skontroloval regresiu