15 gru 2025·6 min czytania

Projektowanie API dla żywotności baterii mobilnej: ogranicz rozmowność

Projektowanie API dla żywotności baterii mobilnej: naucz się batchowania, nagłówków cache i przycinania payloadów, aby zmniejszyć wybudzenia radia, przyspieszyć ekrany i ograniczyć zużycie.

Projektowanie API dla żywotności baterii mobilnej: ogranicz rozmowność

Dlaczego rozmowne API wyczerpują baterię na urządzeniach mobilnych

„Rozmowne” API sprawia, że aplikacja wysyła wiele małych żądań, żeby zbudować jeden ekran. Na papierze każde żądanie wygląda tanio, ale na telefonie sumują się szybko.

Największe uderzenie w baterię często pochodzi od radia sieciowego. Układy komórkowe i Wi‑Fi przełączają się do stanów wysokiego poboru mocy, by wysyłać i odbierać dane. Kiedy aplikacja odpala wiele żądań blisko siebie, radio ciągle się wybudza i pozostaje aktywne dłużej. Nawet jeśli każda odpowiedź jest malutka, powtarzane wybudzenia kosztują prawdziwą energię.

Jest też praca CPU. Każde żądanie oznacza budowę nagłówków, TLS, parsowanie JSON, aktualizację cache'ów i uruchomienie kodu aplikacji do złączenia wyników. Jeśli połączenia upadają, praca konfiguracyjna się powtarza.

Rozmowność sprawia też, że UI wydaje się wolniejszy. Zamiast jednego przewidywalnego ładowania, ekran czeka na łańcuch wywołań. Dostajesz dłuższe wskaźniki ładowania, częściowe renderowania, które przeskakują, i więcej timeoutów przy słabym łączu. Odświeżanie w tle wygląda podobnie: więcej prób, więcej wybudzeń, większe zużycie baterii.

Praktyczne podejście do projektowania API z myślą o baterii mobilnej jest proste: pokaż to samo UI przy mniejszej liczbie rund, mniejszej liczbie bajtów i mniejszej pracy w tle.

Możesz mierzyć sukces za pomocą kilku konkretnych zmian:

  • Mniej wywołań API przy ładowaniu ekranu
  • Mniej pobranych bajtów na ekran
  • Lepszy medianowy i maksymalny czas do interaktywności na sieci komórkowej
  • Mniej odświeżeń w tle i retryów dla tego samego wyniku

Gdy te wskaźniki się poprawią, responsywność i żywotność baterii zazwyczaj idą w parze.

Co zmierzyć przed wprowadzeniem zmian

Zanim zaczniesz łączyć żądania lub dopracowywać cache, zrób jasny obraz tego, co aplikacja robi dziś. Najszybsze wygrane zwykle pojawiają się po naprawieniu kilku powtarzających się winowajców, ale znajdziesz je tylko jeśli zmierzysz prawdziwe ekrany i przepływy (nie tylko pojedynczy test w idealnych warunkach).

Dla kilku ekranów o dużym natężeniu loguj podstawy: ile żądań przypada na jedno ładowanie, które endpointy są wywoływane, ile bajtów wysyłasz i odbierasz (nagłówki plus body), współczynniki retry i timeoutów oraz ile czasu zajmuje, zanim UI będzie użyteczny. Jeśli możesz, rozdzielaj wskaźniki błędów według typu sieci (Wi‑Fi vs komórkowa). Takie podziały często odsłaniają problemy, których nie zobaczysz na stabilnym łączu.

Oddziel ruch pierwszoplanowy od ruchu w tle. Ekran może wyglądać na cichy, ale telefon może być zajęty odświeżaniem w tle, synchronizacją z powiadomieniami, wysyłką analityki lub „pre‑fetch” na zapas. Śledź je oddzielnie, by nie optymalizować niewłaściwych rzeczy.

Gorące miejsca zwykle skupiają się wokół kilku momentów: uruchomienie aplikacji, ekran główny/feeed, ekrany szczegółów, które rozgałęziają się na wiele wywołań, i pull‑to‑refresh. Wybierz jeden z nich i mierz go end‑to‑end.

Ustal bazowy budżet, żeby zespół mógł się zgodzić, co oznacza „dobrze”. Na przykład: „Zimne załadowanie ekranu śledzenia zamówienia nie powinno robić więcej niż 6 żądań i pobrać więcej niż 250 KB przed pokazaniem statusu.”

Jeśli chcesz prostą parę KPI na start, użyj (1) liczby żądań na ładowanie ekranu i (2) współczynnika retry. Cięcie retryów często oszczędza więcej baterii niż się spodziewasz, bo powtarzające się próby utrzymują radio aktywne dłużej.

Krok po kroku: zmniejsz liczbę żądań przez batching

Rozmowne API łatwo stworzyć przez przypadek. Każdy widget ładuje „swoje” dane, a jeden ekran wywołuje tuzin małych calli. Naprawa zwykle nie jest skomplikowana: zidentyfikuj, co zawsze ładuje się razem i zwróć to w mniejszej liczbie wywołań.

Zacznij od mapowania jednego ekranu o dużym ruchu (główna, skrzynka odbiorcza, lista zamówień). Wypisz, co pojawia się nad linią widoczności (above the fold), następnie prześledź każdy element UI do żądania, które go zasila. Często znajdziesz duplikaty (ten sam profil użytkownika pobierany dwukrotnie) i wywołania, które zawsze idą razem (profil plus uprawnienia plus licznik nieprzeczytanych).

Następnie grupuj wywołania, które niezawodnie występują razem. Zwykle masz dwie opcje:

  • Stwórz endpoint dedykowany dla tego ekranu (często najbardziej stabilny)
  • Dodaj endpoint batch, który przyjmuje małą, przewidywalną listę zasobów

Trzymaj batchy skrojone pod ekran i ograniczone, żeby łatwiej je było cachować, monitorować i debugować.

Kilka zasad zapobiega temu, by batching stał się chaosem. Zwracaj tylko to, czego ekran potrzebuje teraz, nie pełnych obiektów „na zapas”. Jeśli niektóre części są opcjonalne, zaznacz to wyraźnie, żeby UI mogło szybko wyrenderować najważniejsze elementy. Projektuj też odpowiedź tak, by częściowe błędy nie wymuszały pełnego retryu. Zdecydowanie tańsze jest ponawianie tylko tego, co nie zadziałało, niż wysyłanie całego batcha ponownie.

Nagłówki cache, które oszczędzają baterię (nie tylko pasmo)

Caching to funkcja oszczędzająca baterię. Każde żądanie wybudza radio, obciąża CPU i uruchamia parsowanie oraz logikę aplikacji. Dobre nagłówki cache zamieniają wiele odświeżeń w lekkie sprawdzenia.

Największy zysk to żądania warunkowe. Zamiast ponownie pobierać te same dane, aplikacja pyta „Czy to się zmieniło?” Jeśli nie, serwer odpowiada małym 304 Not Modified.

Używaj ETag w odpowiedziach, które reprezentują wersję zasobu, a klient niech wysyła If-None-Match przy następnym pobraniu. Jeśli generowanie ETag jest trudne, Last-Modified z If-Modified-Since dobrze działa dla prostych zasobów „updated at”.

Dla danych, które rzadko się zmieniają, podejmij decyzję cache'ową świadomie. Cache-Control powinien odpowiadać rzeczywistości. Krótszy max-age dla profili użytkownika może być ok, podczas gdy konfiguracja aplikacji, listy referencyjne i feature flagi często mogą mieć dłuższy czas.

Po stronie aplikacji traktuj 304 jak ścieżkę szybką. Nie parsuj JSON (go nie ma), nie przebudowuj modeli i nie migaj interfejsem. Zachowaj to, co jest już na ekranie i jedynie zaktualizuj wskaźniki.

Przykład: ekran śledzenia zamówienia pyta o status co 15 sekund. Jeśli odpowiedź zawiera ETag, większość sprawdzeń może zwracać 304. Aplikacja trzyma ostatni status i wykonuje prawdziwą pracę tylko wtedy, gdy status się zmieni (np. z „Packed” na „Shipped”).

Bądź celowy przy wrażliwych danych. Caching nie jest automatycznie niebezpieczny, ale wymaga jasnych zasad. Unikaj cachowania odpowiedzi z danymi osobowymi lub tokenami, chyba że wymagania produktu na to pozwalają. Stosuj krótkie czasy życia dla danych specyficznych dla użytkownika i zapobiegaj przechowywaniu prywatnych odpowiedzi w cache'ach dzielonych (Cache-Control: private gdy potrzeba).

Sprytniejsze payloady: wysyłaj mniej, parsuj mniej

Buduj zgodnie z mobilnym budżetem
Ustal budżet żądań na ekran i projektuj endpointy tak, by go trzymać na sieci komórkowej.
Rozpocznij

Każdy dodatkowy bajt to na mobilu więcej niż tylko pasmo. Utrzymuje radio dłużej aktywne i zmusza aplikację do pracy CPU przy dekodowaniu JSON i aktualizacji modeli. Jeśli chcesz zmniejszyć rozmowność API, przycinanie payloadów często daje najszybsze efekty.

Zacznij od audytu payloadów dla ekranu. Wybierz jeden ekran (np. feed główny), zanotuj rozmiary odpowiedzi i przejrzyj pole po polu: czy klient to renderuje, czy używa tego tylko do decyzji o pokazaniu? Jeśli nie, usuń to z endpointu.

Dla list kształt „podsumowania” zwykle wystarcza. Wiersz listy często potrzebuje id, tytułu, statusu i znacznika czasu. Nie potrzebuje pełnych opisów, długich notatek ani głęboko zagnieżdżonych obiektów. Pobierz szczegóły dopiero, gdy użytkownik otworzy element.

Kilka zmian, które szybko tną payloady:

  • Preferuj id lub krótkie kody enum zamiast powtarzających się długich ciągów
  • Nie przesyłaj oczywistych wartości domyślnych, które klient może założyć
  • Unikaj powtarzania tego samego zagnieżdżonego obiektu w każdym elemencie listy
  • Utrzymuj stabilność nazw pól i typów, aby klient nie musiał rozgałęziać logiki i ponownie parsować

Kompresja może pomóc, szczególnie na wolnych łączach, ale przetestuj kompromis CPU na realnych urządzeniach. Gzip lub Brotli często mocno zmniejszają transfer, ale starsze telefony mogą spędzić zauważalny czas na dekompresji bardzo dużych odpowiedzi. Najlepszy zysk to nadal wysyłanie mniej danych od początku.

Traktuj kształt odpowiedzi jak kontrakt. Gdy nazwy pól i typy są stabilne, aplikacja potrzebuje mniej zapasowych ścieżek i defensywnego kodu, co pomaga utrzymać UI płynnym i zużycie baterii niskim.

Projektuj pod słabe sieci i mniejsze retry

Aplikacja mobilna nie pali baterii tylko przy wysyłaniu żądań. Pali ją też przy nieudanych próbach, retryach, ponownym wybudzaniu radia i powtarzaniu pracy. Jeśli API zakłada idealne Wi‑Fi, prawdziwi użytkownicy na niestabilnym 4G za to zapłacą.

Ułatw zadawanie mniejszych zapytań. Preferuj filtry po stronie serwera i paginację zamiast „pobierz wszystko i filtruj na telefonie”. Jeśli ekran potrzebuje ostatnich 20 zdarzeń dla jednego użytkownika, obsłuż takie zapytanie, żeby aplikacja nie musiała ściągać setek wierszy tylko po to, by większość odrzucić.

Wspieraj delta‑sync, żeby klient mógł zapytać „co się zmieniło od ostatniego sprawdzenia?”. To może być proste: zwracanie znacznika czasu lub rosnącego numeru wersji, a potem pozwolenie klientowi żądać tylko aktualizacji i usunięć od tego punktu.

Retry są nieuniknione, więc spraw, by operacje były idempotentne. Retry nie powinien powodować podwójnego obciążenia czy duplikowania zasobów. Klucze idempotencyjne dla operacji tworzących i semantyka ustawiania stanu (zamiast „dodaj jeden więcej”) bardzo pomagają.

Gdy retry występują, unikaj „retry stormów”. Używaj wykładniczego backoffu z jitterem, aby tysiące urządzeń nie uderzały w serwery w tym samym czasie i aby telefon nie wybudzał się co sekundę.

Zwracaj jasne kody błędów, które pomogą aplikacji zdecydować, co robić dalej. 401 powinno uruchomić ponowną autoryzację, 404 zwykle powstrzyma retry, 409 może wymagać odświeżenia stanu, a 429 lub 503 powinny wyzwalać backoff.

Zachowania klienta, które mnożą koszty API

Unikaj długu technicznego w API
Regeneruj czysty kod źródłowy wraz ze zmianami wymagań, bez narastającego długu technicznego.
Generuj kod

Nawet przy dobrze zaprojektowanym API klient może cicho pomnożyć pracę sieciową. Na mobile te dodatkowe wybudzenia i czas aktywnego radia często kosztują więcej baterii niż same bajty.

Cache'uj dane, które rzadko się zmieniają. Zdjęcia profilowe, feature flagi i dane referencyjne (kraje, statusy, kategorie) nie powinny być pobierane przy każdej wizycie ekranu. Nadaj im rozsądne czasy życia, przechowuj na dysku i odświeżaj tylko gdy potrzeba. Jeśli API wspiera walidację (ETag lub Last-Modified), szybkie sprawdzenie często jest tańsze niż pełne pobranie.

Innym częstym problemem są duplikaty jednoczesnych (in‑flight) żądań. Dwie części aplikacji proszą o ten sam zasób w tym samym czasie (np. nagłówek i ekran ustawień oba requestują profil). Bez koalescencji wysyłasz dwa calli, parsujesz dwie odpowiedzi i aktualizujesz stan dwukrotnie. Traktuj jedno wywołanie sieci jako pojedyncze źródło prawdy i pozwól kilku konsumentom czekać na jego wynik.

Odświeżanie w tle powinno być celowe. Jeśli nie zmieni tego, co użytkownik zobaczy wkrótce, albo nie wywoła powiadomienia, zwykle może poczekać. Unikaj uruchamiania logiki odświeżania przy każdym wznowieniu aplikacji. Dodaj krótki cooldown i sprawdź, kiedy dane były ostatnio aktualizowane.

Jeśli tworzysz backendy z AppMaster, łatwiej wspierać te zachowania klienta przez kształtowanie endpointów wokół ekranów, utrzymywanie spójnych schematów odpowiedzi i dodawanie nagłówków cache w kontrolowany sposób, tak aby klienci mogli przez większość czasu pozostawać cicho.

Typowe błędy przy batchingu, cache i payloadach

Dostarcz kompletne rozwiązanie
Stwórz backend, aplikację webową i natywne aplikacje mobilne z jednego projektu no-code.
Zbuduj aplikację

Celem jest mniej wybudzeń radia, mniej pracy CPU i mniej retry. Kilka wzorców może odwrócić oszczędności i nawet spowodować, że ekrany będą wolniejsze.

Kiedy batching pogarsza sytuację

Batching pomaga aż do momentu, gdy batch zamienia się w żądanie „daj mi wszystko”. Jeśli serwer musi łączyć wiele tabel, wykonywać ciężkie sprawdzenia uprawnień i budować ogromną odpowiedź, to jedno żądanie może trwać dłużej niż kilka mniejszych. Na mobile jedno wolne żądanie trzyma aplikację w oczekiwaniu, utrzymuje aktywne radio i zwiększa ryzyko timeoutu.

Zdrowszy batch jest skrojony pod ekran: zawiera tylko to, czego widok potrzebuje, z jasnymi limitami. Jeśli nie potrafisz opisać odpowiedzi jednym zdaniem, endpoint prawdopodobnie jest zbyt szeroki.

Cache, który tworzy przestarzałe ekrany

Caching bez jasnej strategii unieważniania prowadzi do złej pętli: użytkownicy widzą stare dane, robią pull‑to‑refresh i aplikacja wykonuje dodatkowe pełne przeładowania. Używaj nagłówków cache z planem, co aktualizuje dane (akcje create/update, zdarzenia serwera lub krótkie okna świeżości), żeby klient mógł ufać cache'owi.

Polling to kolejna pułapka baterii. Ścisły timer co 5 sekund utrzymuje urządzenie zajęte nawet gdy nic się nie zmienia. Preferuj aktualizacje sterowane serwerowo, lub agresywnie zwiększaj odstępy (dłuższe interwały po pustych pollach, pauza w tle).

Zbyt duże payloady to cichy koszt. Zwracanie ogromnych zagnieżdżonych obiektów „dla wygody” oznacza więcej bajtów, więcej parsowania JSON i więcej churnu pamięci. Wysyłaj tylko to, czego ekran potrzebuje i ładuj szczegóły na żądanie.

Wreszcie, nie ignoruj częściowych błędów w batchu. Jeśli jeden pod‑wynik się nie uda i ponawiasz cały batch, dublujesz ruch. Projektuj odpowiedzi tak, by klient mógł ponowić tylko nieudane części.

Krótka lista kontrolna: trzymaj batchy ograniczone, zdefiniuj świeżość cache wcześniej, unikaj ścisłego pollingu, przycinaj payloady i wspieraj częściowy sukces.

Krótka lista przed wydaniem

Zanim wypuścisz, zrób jedną rundę skupioną tylko na zachowaniu sieci. Większość oszczędności baterii pochodzi z usuwania niespodzianek: mniej wybudzeń, mniej parsowania i mniej retryów w tle.

Przeprowadź to na trzech najważniejszych ekranach:

  • Zimne ładowania kończą się w małej, przewidywalnej liczbie żądań (uważaj na ukryte follow‑upy, np. pobrania per‑item)
  • Odpowiedzi zawierają jasne zasady cache (ETag lub Last-Modified tam, gdzie pasuje) i zwracają 304 Not Modified, gdy nic się nie zmieniło
  • Endpoints list są ograniczone: stabilne sortowanie, paginacja i brak nieużywanych pól domyślnie
  • Logika retry używa backoffu z jitterem i zatrzymuje się przy błędach, których retry nie naprawi; łączny czas retry jest ograniczony
  • Aktualizacje w tle są uzasadnione; unikaj ciągłego pollingu chyba że wyraźnie zmienia to to, co użytkownik widzi

Proste sprawdzenie rzeczywistości: załaduj ekran raz, włącz tryb samolotowy, potem otwórz go ponownie. Jeśli nadal pokazuje coś użytecznego (zcache'owane treści, ostatni znany stan, przyjazne zastępcze widoki), prawdopodobnie usunąłeś zbędne wywołania i poprawiłeś postrzeganą szybkość.

Przykład: jak uczynić ekran śledzenia zamówień tańszym w ładowaniu

Zamień plany API w kod
Modeluj dane i generuj kod backendu bez ręcznego pisania boilerplate'u.
Zacznij budować

Klient otwiera aplikację śledzącą zamówienia na danych mobilnych z 20% baterii. Chce jedną rzecz: „Gdzie jest moja paczka teraz?” Ekran wygląda prosto, ale ruch API za nim może być zaskakująco kosztowny.

Wcześniej aplikacja ładowała ekran serią żądań. UI czekało, radio wybudzało się wielokrotnie, a kilka wywołań timeoutowało przy słabym łączu.

Typowy „przed” wygląda tak:

  • GET /orders/{id} — podsumowanie zamówienia
  • GET /orders/{id}/items — pozycje zamówienia
  • GET /orders/{id}/history — zdarzenia statusu
  • GET /me — profil użytkownika i preferencje
  • GET /settings — zasady wyświetlania (waluta, format daty)

Teraz wprowadź trzy zmiany, które nie zmieniają UI.

Po pierwsze, dodaj jeden endpoint ekranowy, który zwraca to, czego widok potrzebuje w jednej rundzie: podsumowanie zamówienia, najnowszy status, ostatnią historię i tytuły pozycji. Po drugie, cachuj profil: GET /me zwraca ETag i Cache-Control: private, max-age=86400, więc większość otwarć stanie się szybkim 304 (albo w ogóle bez żądania, jeśli kopia lokalna jest nadal świeża). Po trzecie, odchudź payload: lista pozycji wysyła tylko id, name, qty i thumbnail_url, nie pełne opisy ani nieużywane metadane.

Efekt to mniej rund, mniej bajtów i mniej retryów, gdy sieć zaburza połączenie. Radio telefonu więcej czasu spędza uśpione, a to tam rzeczywiście kryją się oszczędności baterii.

Dla użytkownika nic „nowego” się nie pojawia. Ekran jest taki sam, ale ładuje się szybciej, działa responsywniej i lepiej radzi sobie przy niestabilnym łączu.

Następne kroki: praktyczny plan wprowadzenia (i gdzie AppMaster może pomóc)

Jeśli chcesz szybkie zwycięstwa, zacznij od małych kroków i udowodnij wpływ. Oszczędności baterii zwykle pochodzą z mniejszej liczby wybudzeń radia i mniej parsowania, a nie z dużego przepisania całego systemu.

Trzy zmiany, które są bezpieczne, mierzalne i łatwe do wycofania:

  • Zmierz jeden ekran end‑to‑end (liczba żądań, łączna liczba bajtów, czas do interaktywności, błędy i retry)
  • Zgrupuj żądania tego ekranu w jedno lub dwa wywołania (zachowaj stare endpointy dla kompatybilności)
  • Dodaj wsparcie ETag na najwyższym ruchowo GETach, aby klienci mogli używać If-None-Match i otrzymywać 304 Not Modified

Wybierz funkcję o stałym użyciu, jak lista zamówień czy skrzynka odbiorcza. Wdróż za flagą serwerową jeśli możesz, potem porównaj KPI dla starej i nowej ścieżki przez kilka dni. Szukaj mniejszej liczby żądań na sesję, mniejszej liczby retryów i mniejszej liczby pobranych bajtów na aktywnego użytkownika.

Koordynuj wydania API i aplikacji, żeby starsi klienci nie zepsuli się. Praktyczna zasada: najpierw dodaj nowe zachowanie, potem migruj klientów, na końcu usuń stare zachowanie. Jeśli zmieniasz politykę cache, bądź ostrożny z danymi spersonalizowanymi i upewnij się, że cache dzielone nie pomiesza użytkowników.

Jeśli chcesz szybciej prototypować i wypuszczać zmiany backendu, AppMaster (appmaster.io) może pomóc — modeluj dane wizualnie, buduj logikę biznesową przeciągnij‑i‑upuść i regeneruj produkcyjny kod źródłowy w miarę zmian wymagań.

Wypróbuj najpierw jeden endpoint z batchingiem i ETag na jednym ekranie o dużym ruchu. Jeśli liczby się poprawią, będziesz wiedzieć dokładnie, gdzie warto zainwestować więcej czasu inżynierskiego.

FAQ

Ile wywołań API na ekran to „za dużo” na mobile?

Dobry punkt startowy to ustawić budżet na ekran, a potem mierzyć rzeczywiste sesje. Wiele zespołów zaczyna od wartości około 4–8 żądań dla zimnego załadowania ekranu na sieci komórkowej, a potem dopracowuje to, eliminując największych winowajców. Właściczna liczba to ta, która konsekwentnie spełnia wasz cel czasu do interaktywności bez wywoływania retryów lub długich okresów aktywnego radia.

Czy batching zawsze jest lepszy niż wiele małych endpointów?

Batching zwykle pomaga, gdy kilka wywołań zawsze występuje razem, ale może zaszkodzić, jeśli batch stanie się powolny lub ogromny. Trzymaj odpowiedzi dla batcha „skrojone pod ekran” i ograniczone, żeby jedno żądanie nie stało się pojedynczym punktem awarii. Jeśli batched endpoint regularnie timeoutuje lub zwraca dużo nieużywanych danych, lepiej podzielić go na kilka skoncentrowanych wywołań.

Które nagłówki cache dają największe oszczędności baterii?

Zacznij od ETag i warunkowych zapytań z użyciem If-None-Match, bo często zamieniają wiele odświeżeń w drobne odpowiedzi 304 Not Modified. Dodaj Cache-Control zgodny z tym, jak często dane faktycznie się zmieniają, aby klient mógł uniknąć niepotrzebnej pracy sieciowej. Jeśli ETag jest trudny do wdrożenia, Last-Modified z If-Modified-Since to solidne rozwiązanie zastępcze dla zasobów opartych na znaczniku czasu.

Czy używać ETag czy Last-Modified?

Używaj ETag, gdy chcesz niezawodnej kontroli wersji zasobu, zwłaszcza gdy zmiany nie mapują się precyzyjnie na znacznik czasu. Używaj Last-Modified, gdy serwer ma jasny czas aktualizacji i akceptujesz precyzję do poziomu znacznika czasu. Jeśli możesz wdrożyć tylko jedno rozwiązanie, ETag często jest dokładniejszym wyborem, by unikać zbędnych pobrań.

Co powinniśmy zmierzyć przed zmianą API?

Instrumentuj po ekranie i sesji, nie tylko po endpointach. Loguj liczbę żądań, bajty (nagłówki plus body), retry, timeouty i czas do interaktywności, oraz rozdziel ruch pierwszoplanowy od tła, by nie optymalizować niewłaściwych obciążeń. Zwykle kilka ekranów lub przepływów generuje większość powtarzających się wybudzeń radia.

Jak obsługiwać częściowe błędy w odpowiedzi batch?

Zaprojektuj odpowiedź zbiorczą tak, by każdy pod-wynik mógł się udać lub zawieść niezależnie, i dołącz wystarczająco szczegółów błędu, aby klient mógł ponowić jedynie to, co nie powiodło się. Unikaj zmuszania klienta do ponownego żądania całego batcha z powodu jednej awarii — to zwiększa ruch i dodatkowe wybudzenia radia przy niestabilnej łączności.

Jak najszybciej zmniejszyć rozmiar payloadu bez psucia aplikacji?

Przytnij odpowiedzi do tego, co ekran rzeczywiście renderuje teraz, i stosuj kształty podsumowań dla list. Przenieś ciężkie lub rzadko używane pola do endpointu szczegółowego, który ładuje się dopiero, gdy użytkownik otworzy element. To zmniejsza ilość danych przesyłanych przez sieć i redukuje parsowanie JSON oraz aktualizacje modeli, co na telefonach oznacza realne oszczędności CPU i baterii.

Jak dostroić logikę retry, by oszczędzać baterię?

Stosuj wykładniczy backoff z jitterem i ogranicz łączny czas retry, żeby telefon nie wybudzał się co kilka sekund. Zadbaj o idempotentność operacji zapisu, żeby retry nie tworzył duplikatów. Zwracaj też jasne kody statusu, żeby klient mógł przerwać ponawianie, gdy błąd nie naprawi się sam.

Jak uniknąć drenażu baterii przez polling?

Częste pollingi utrzymują radio i CPU zajęte, nawet gdy nic się nie zmienia. Jeśli musisz pollować, wydłużaj odstępy, gdy odpowiedzi się nie zmieniają, i wstrzymaj polling w tle. Gdy to możliwe, używaj aktualizacji sterowanych zdarzeniami, żeby aplikacja budziła się tylko gdy jest coś nowego do pokazania.

Jak AppMaster może pomóc w szybszym wprowadzeniu tych zmian?

W AppMaster możesz tworzyć endpointy skrojone pod ekran i utrzymywać stabilne schematy odpowiedzi, co ułatwia batching i formowanie payloadów. Możesz też dodać logikę wersjonowania i zwracać nagłówki wspierające warunkowe zapytania, żeby klienci otrzymywali szybkie odpowiedzi „bez zmian”. Praktyczne podejście to zacząć od jednego ekranu o dużym ruchu: wypuścić jeden endpoint z batchingiem i dodać ETag na kluczowych GETach, a potem zmierzyć spadek liczby żądań i retryów.

Łatwy do uruchomienia
Stworzyć coś niesamowitego

Eksperymentuj z AppMaster z darmowym planem.
Kiedy będziesz gotowy, możesz wybrać odpowiednią subskrypcję.

Rozpocznij