Zyski:
- Najpierw przyjmując profil i mierząc rzeczywiste wąskie gardło, dokonując optymalizacji w oparciu o dane, a nie domysły, i zinterpretując wyniki profilu przez sztuczną inteligencję
- Możliwość ukierunkowania najdroższych operacji pod względem czasu uruchamiania, płynności, pamięci i baterii oraz usunięcia ciężkiej pracy z głównego wątku
- Możliwość zarządzania kosztami baterii i procesora w przypadku funkcji AI, takich jak model na urządzeniu i połączenia w chmurze poprzez próbkowanie i przetwarzanie wsadowe
Użytkownicy mobilni są niecierpliwi. Jeśli aplikacja otwiera się powoli, zawiesza się podczas przewijania lub szybko wyczerpuje baterię, użytkownik usuwa ją i przyznaje jej gwiazdkę w sklepie. Wydajność i wydajność baterii są kwestią przetrwania aplikacji mobilnej; Ma to bezpośredni wpływ zarówno na satysfakcję użytkowników, jak i na ranking sklepu. Sztuczna inteligencja jest potężną pomocą w wykrywaniu wąskich gardeł wydajności (wąskich gardeł), interpretacji wyników pomiarów i zalecaniu optymalizacji. Ale złota zasada pozostaje: najpierw zmierz, później optymalizuj. W tym module nauczymy się rozwiązywać problemy z wydajnością i baterią w oparciu o dane za pomocą sztucznej inteligencji. Szczególnie ważną kwestią jest zarządzanie wpływem na baterię i wydajność możliwości AI, które dodaliśmy w poprzednich jednostkach (model on-device, rozmowy w chmurze).
Optymalizacja bez mierzenia
Największym błędem niedoświadczonego programisty jest optymalizacja predykcyjna: marnowanie czasu na mówienie „ten musi być wolny”. Prawdziwe wąskie gardło prawie zawsze znajduje się w nieoczekiwanym miejscu. Zatem najpierw wykonywany jest profil (profilowanie — mierzenie, która część aplikacji zużywa ile czasu/pamięci/baterii). Do tego zadania służą Android Studio Profiler i Xcode Instruments. Przekazywanie danych pomiarowych AI przyspiesza interpretację; Ale bez pomiarów mówienie AI „moja aplikacja jest powolna, należy ją przyspieszyć” oznacza ślepe przewidywanie.
Cztery główne osie wydajności to:
oś
objaw
typowa przyczyna
Czas rozpoczęcia
Aplikacja otwiera się z opóźnieniem
Ciężka praca nad głównym wątkiem
Płynność (Janek)
Przewijanie utknęło
Długie przetwarzanie, niepotrzebne przerysowanie w wątku interfejsu użytkownika
pamięć
obrzęk, zapaść
Wyciek, duży obraz, niekontrolowana pamięć podręczna
akumulator/ciepło
szybki wytrysk
Ciągła lokalizacja, sieć, czujnik, zadanie w tle
Wskazówka: pytając sztuczną inteligencję o problem z wydajnością, podaj wynik profilu (która funkcja zajmuje jak długo, wykres pamięci). Twarde dane, takie jak „Ta funkcja zajmuje 30 ms na klatkę”, pozwalają sztucznej inteligencji skupić się na prawdziwym wąskim gardle; Subiektywne wyrażenie, takie jak „powoli”, daje ogólną i bezużyteczną odpowiedź.
Koszt baterii umiejętności AI
Funkcje AI, które dodaliśmy w tym module, są potężne, ale nie są bezpłatne. Wyodrębnianie modelu na urządzeniu obciąża procesor i baterię; Ciągłe rozpoznawanie obrazu (np. aparat przetwarzający każdą klatkę) powoduje nagrzewanie się telefonu i rozładowywanie baterii w ciągu kilku minut. Z drugiej strony połączenia w chmurze AI zużywają baterię, utrzymując radio sieciowe (antenę wysyłającą i odbierającą dane) przez cały czas. Rozwiązania: uruchamiaj model na urządzeniu tylko wtedy, gdy jest to potrzebne, próbkuj kamerę kilka razy na sekundę zamiast każdej klatki, zbiorczo wysyłaj żądania do chmury, wykonuj ciężkie prace, gdy urządzenie się ładuje lub jest w stanie bezczynności.
Uwaga: Stale działająca funkcja AI (tłumaczenie na żywo, ciągłe rozpoznawanie obiektów) może bardzo szybko rozładować baterię, nagrzać urządzenie i może zostać zablokowana przez system. Funkcja, która sprawia, że użytkownik czuje ten koszt, została usunięta. Zawsze pytam sztuczną inteligencję „jak sprawić, by ta funkcja była przyjazna dla baterii?” Zadaj także pytanie.
Etapy optymalizacji
- Zmierz. Znajdź prawdziwe wąskie gardło za pomocą Profilera; nie zgaduj.
- Wybierz największy problem. Nie goń za 1% poprawą; Celuj w najdroższą transakcję.
- Zapytaj AI o dane. Poproś o sugestię optymalizacji z danymi wyjściowymi profilu + odpowiednim kodem.
- Zastosuj i zmierz ponownie. Czy poprawa jest realna? Czy liczba spadła?
- Kontrola regresji. Czy optymalizacja coś zepsuła? Powtórz testy wizualne i funkcjonalne.
trzy mini etui
Przypadek 1 — Szukanie w złym miejscu. Jeden z zespołów myślał, że listy utknęły i tygodniami bezskutecznie przepracowywał kod przewijania. Kiedy wzięli profiler i przekazali dane AI, okazało się, że prawdziwym wąskim gardłem były obrazy ładowane ponownie przez sieć w każdym wierszu. Po dodaniu pamięci podręcznej wizualnej płynność wzrosła z 42 FPS do 60 FPS. Lekcja: pomiar pozwala uniknąć tygodni daremnego wysiłku.
Przypadek 2 — Funkcja potwora baterii. Aplikacja do tłumaczenia dodała tłumaczenie tekstu na żywo za pomocą kamery; Użytkownicy narzekali, że „telefon nagrzał się w ciągu 15 minut i rozładowało się 30% baterii”. Po konsultacji ze sztuczną inteligencją stwierdzono, że aparat przetwarza 30 klatek na sekundę; Gdy zmniejszono tę liczbę do 5 klatek i wynik aktualizowano w odstępie kilku klatek, zużycie baterii spadło do jednej trzeciej, a jakość nie była zauważalna. Lekcja: Zawsze ustawiaj AI za pomocą oka baterii.
Przypadek 3 – Powolny początek. Aplikacja otwierała się za 4,5 sekundy; 20% użytkowników wychodziło przy uruchomieniu. Z profilu wynikało, że wszystkie prace początkowe (analityka, ładowanie danych, przygotowanie modelu) zostały wykonane sekwencyjnie na głównym wątku. W związku z propozycją sztucznej inteligencji zostały one odroczone i odłożone na później; Czas otwarcia został skrócony do 1,3 sekundy, a wskaźnik porzuceń spadł o połowę. Lekcja: na początku wykonuj tylko niezbędną pracę.
Słaba zachęta/silna zachęta
Słaby monit: „Moja aplikacja działa wolno, przyspiesz ją”.
Potężny monit: „Przewijanie listy blokuje się (jank) w mojej aplikacji na Androida. Dane profilera: bindImageView zajmuje 28 ms na każdą klatkę, obrazy są ładowane z sieci za każdym razem, nie ma pamięci podręcznej. Powiązany kod: [kod adaptera RecyclerView]. Poleć 3 najskuteczniejsze optymalizacje w kolejności wpływu. Określ oczekiwany zysk i możliwe skutki uboczne dla każdego z nich. Ustal priorytet rozwiązań, które nie obniżają jakości obrazu.
Szablony do kopiowania
Szablon analizy wąskiego gardła: „Zinterpretuj następujące dane profilu i znajdź 3 najdroższe operacje: [dane wyjściowe profilera]. Zaproponuj możliwą przyczynę i konkretną optymalizację dla każdej z nich. Najpierw daj największy wpływ”.
Szablon optymalizacji baterii: „Ta funkcja szybko wyczerpuje baterię: [funkcja, np. stała lokalizacja]. Zadbaj o to, aby była przyjazna dla baterii: – Zmniejsz częstotliwość próbkowania – Ograniczenia w tle – Przetwarzanie wsadowe – Uruchamiaj tylko w razie potrzeby Sortuj rozwiązania bez zakłócania pracy użytkownika. [kod]”
Szablon przyspieszania uruchamiania: „Przyspiesz uruchamianie aplikacji. Rzeczy aktualnie wykonywane podczas uruchamiania: [lista]. Które można odłożyć, w tle lub leniwie załadować? Oddziel te najważniejsze. [kod]”
Szablon kosztów funkcji AI: „Oceń wydajność i koszt baterii dodanej przeze mnie funkcji [model na urządzeniu / połączenie w chmurze]. Wymień wskaźniki, które powinienem zmierzyć, oraz strategie mające na celu zmniejszenie kosztów. [kod]”
Typowe błędy
- Optymalizacja bez mierzenia. Prawdziwe wąskie gardło często znajduje się w innym miejscu niż przewidywano.
- Gonitwa za małymi zyskami. Dąż do najdroższych działań, a nie do poprawy o 1%.
- Ignorowanie kosztu baterii funkcji AI. Ciągle działający model/kamera/sieć zużywa baterię.
- Męczący główny wątek. Ciężkie prace związane z uruchamianiem i przewijaniem nie powinny dotyczyć wątku interfejsu użytkownika.
- Brak ponownego pomiaru po optymalizacji. Sprawdź, czy poprawa jest realna i niczego nie psuje.
- Pomiar wydajności w emulatorze. Rzeczywista prędkość urządzenia, temperatura i bateria są zupełnie inne.
Podsumowując
Wydajność i bateria są kwestią przetrwania aplikacji mobilnej. Złota zasada: najpierw zmierz, później optymalizuj. Przekazanie danych profilowych AI przyspiesza interpretację; Niezmierzona chęć „przyspieszenia” prowadzi do ślepych domysłów. Celuj w najdroższą transakcję, nie goń za małymi zyskami. Możliwości AI dodane w tym module są potężne, ale wiążą się z kosztami baterii i procesora; Zarządzaj tymi kosztami, zmniejszając częstotliwość próbkowania, grupowanie i uruchamianie tylko wtedy, gdy jest to konieczne. Po każdej optymalizacji dokonaj ponownego pomiaru na prawdziwym urządzeniu.
Zadanie aplikacji
Zaimportuj profil do aplikacji (własny projekt lub przykład) lub utwórz przykładowy wynik profilu i poproś sztuczną inteligencję o jego interpretację za pomocą „szablonu analizy wąskiego gardła”. Zastosuj optymalizację o najwyższym wpływie i zmierz ponownie: czy liczba rzeczywiście spadła? Oceń także funkcję AI dodaną w tym module (model na urządzeniu lub połączenie w chmurze) pod kątem baterii za pomocą „szablonu kosztów funkcji AI” i określ co najmniej jedno ustawienie przyjazne dla baterii.
lista kontrolna
- [ ] Mam profil przed optymalizacją, nie zgadłem
- [ ] Celowałem w najdroższy handel, nie rzuciłem się na małe zyski
- [ ] Podałem dane profilu AI w konkretnych liczbach
- [ ] Oceniłem koszt baterii/procesora funkcji AI
- [ ] Usunąłem ciężkie dźwiganie z głównego wątku
- [ ] Po optymalizacji wykonałem ponownie pomiar na prawdziwym urządzeniu i sprawdziłem regresję