定位精度设太高是耗电主因:默认启用高精度会频繁唤醒GPS,应设enableHighAccuracy: false优先用Wi-Fi/基站定位,并及时clearWatch()清理监听、用位移阈值替代轮询、接受后台无法精准定位的事实。
定位精度设太高是耗电主因
HTML5 的 navigator.geolocation.watchPosition() 默认会持续获取高精度位置,尤其在移动设备上频繁唤醒 GPS 模块,导致电量快速下降。实际多数 Web 应用(如签到、附近商家)根本不需要 3 米级精度,但开发者常忽略配置参数。
- 务必设置
enableHighAccuracy: false—— 这会优先使用 Wi-Fi 和基站定位,省电效果明显 - 搭配
timeout: 5000和maximumAge: 60000,避免重复请求旧位置或无限等待 - 若只需一次定位,用
getCurrentPosition()而非watchPosition(),后者默认持续监听
watchPosition 不关就一直耗电
调用 watchPosition() 后返回一个 watchId,但很多人没意识到:只要不手动清除,浏览器就会一直维持定位监听,即使页面切到后台或用户滚动离开地图区域。
- 在不需要定位时,必须显式调用
navigator.geolocation.clearWatch(watchId) - 监听
visibilitychange事件,在页面不可见时暂停定位,可见时再恢复(注意:部分 Android 浏览器后台仍可能保活) - 不要依赖
pagehide或beforeunload清理 —— 它们不一定触发,尤其 PWA 或安卓 Chrome 中
地理围栏比轮询更省电
如果业务逻辑是“用户进入某区域才触发动作”(如门店提醒),用定时轮询 getCurrentPosition() 是最差方案 —— 每 30 秒拉一次,GPS 频繁启停反而更耗电。