Aplicația pentru Yelp pentru Android a urmat o dietă

- Coltin Caverhill, inginer software
- 12 mai 2016
Fie că este vorba de utilizarea bateriei, de rețea sau de timp, ne pasă mult de resursele utilizatorilor noștri. O aplicație mare creează o barieră de intrare pentru utilizatorii din rețele de măsurare sau de viteză redusă. Ultima Ziua Recunoștinței, alertele noastre automate ne-au anunțat că dimensiunea aplicației noastre era din ce în ce mai mare decât ne-ar plăcea și făcând mai dificilă descărcarea aplicației de către utilizatorii cu resurse reduse.
Aici am văzut o tendință ascendentă în dimensiunea aplicației pe măsură ce am adăugat mai multe funcții și am construit o aplicație mai convingătoare. Pentru a aborda dimensiunea aplicației, mai întâi a trebuit să înțelegem de unde provine acea dimensiune.
Defalcarea unei versiuni de versiune în jurul lunii septembrie 2015.
Privind aceste două grafice, am putut vedea că imaginile au ocupat un procent mare din dimensiunea globală a APK-ului. Dar de ce au ocupat un procent mai mare de spațiu odată ce a fost comprimat?
Motivul a fost că imaginile nu sunt comprimate în timpul procesului de arhivare a APK-urilor. Aceasta este pentru a permite imaginilor să fie cartate de memorie de pe disc, mai degrabă decât să le încărcați în RAM. Aceasta este o optimizare excelentă a sistemelor de operare moderne precum Android, dar înseamnă că nu ne putem baza pe procesul APK pentru a optimiza imaginile pentru noi. Fiecare octet dintr-o imagine se traduce într-un octet din APK-ul final.
A început să pară că am putea face o mare diferență prin reducerea dimensiunii fișierului imaginilor noastre. În căutarea potențialelor îmbunătățiri, am aflat că Android 4.2.1 a introdus un nou format de imagine numit WebP care pretindea o compresie mai bună decât JPEG sau PNG. Din fericire, aplicația Yelp acceptă Android 4.4+ și imaginile sale sunt în majoritate PNG-uri cu câteva JPEG-uri. Pentru a testa revendicările WebP, am convertit peste 2000 de PNG-uri cu această comandă:
Doar 8 din cele peste 2000 de PNG pe care le-am comprimat nu au beneficiat de conversia în WebP, iar diferența pentru acestea a fost extrem de mică (doar în jur de 400 de octeți). În general, dimensiunea APK-ului comprimat a scăzut de la 27,1 MB la 23,1 MB, fără pierderi în calitatea imaginilor. Defalcarea noastră a favorizat încă imagini destul de puțin, dar nu la fel de semnificativ.
Această reducere a dimensiunii a fost grozavă, dar am avut îngrijorări cu privire la performanța în timpul rulării. WebP ar necesita mult mai mult timp de procesare pentru a decoda/reda? Am ajunge să folosim mai multă memorie? Folosind instrumentele de performanță Android, nu am găsit nicio creștere a memoriei sau a încărcării procesorului la încărcarea imaginilor WebP comparativ cu variantele lor PNG pe o varietate de dispozitive. Rezultate similare au fost raportate de această lucrare pe WebP, care este Android agnostic.