Problemet
Göran hörde av sig efter att ha installerat kartan som app pĂ„ sin iPhone. Batteriet gick frĂ„n fullt till halvt pĂ„ en förmiddag. Han hade helt rĂ€tt â kartan fortsatte att hĂ€mta fordonspositioner varannan sekund, Ă€ven nĂ€r appen lĂ„g i bakgrunden eller telefonen var lĂ„st.
Det innebar ungefĂ€r 43 000 anrop per dag som ingen hade nytta av. Varje anrop vĂ€cker telefonens nĂ€tverksradio, som sedan hĂ„ller sig vaken i vĂ€ntan pĂ„ nĂ€sta â ett klassiskt mönster för batteridrĂ€nering pĂ„ mobiler.
Varför det hÀnde
Kartan byggdes som en vanlig webbsida som man besöker i webblĂ€saren. NĂ€r man stĂ€nger fliken eller navigerar bort försvinner sidan och all kod slutar köra â ingen batteripĂ„verkan.
Men nĂ€r kartan installeras som PWA (app pĂ„ hemskĂ€rmen) beter den sig annorlunda. iOS kan hĂ„lla appen vid liv i bakgrunden, och de tre datahĂ€mtningslooparna â fordonspositioner var 2:a sekund, besökarantal var 30:e sekund, versionskontroll var 60:e sekund â fortsatte snurra i tomma intet.
Lösningen
Kartan lyssnar nu pĂ„ webblĂ€sarens Page Visibility API. SĂ„ fort appen inte syns pĂ„ skĂ€rmen stoppas all datahĂ€mtning. NĂ€r du öppnar appen igen startar allt omedelbart â du mĂ€rker ingen skillnad, förutom att batteriet hĂ„ller.
Jag mĂ€tte med Puppeteer före och efter, med 30 sekunder synlig â 60 sekunder gömd â 30 sekunder synlig igen:
| Före đȘ« | Efter đ | |
|---|---|---|
| Anrop (60 s gömd) | 33 | 0 |
| Data (60 s gömd) | 1,2 MB | 0 B |
| Polling nÀr synlig | 16 req/30 s | 16 req/30 s |
Screensaver-lĂ€get (?screensaver) Ă€r undantaget â det Ă€r tĂ€nkt att köras kontinuerligt pĂ„ en dedikerad skĂ€rm och pausar aldrig.
Tack Göran för rapporten! Har du installerat kartan som app och mĂ€rkt av batteriproblem bör det vara löst nu â appen uppdateras automatiskt nĂ€sta gĂ„ng du öppnar den.