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)330
Data (60 s gömd)1,2 MB0 B
Polling nÀr synlig16 req/30 s16 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.