Tiles: heal blank tiles online (periodic OSM-reachability check + backfill)
The on-demand loader never retries a tile whose fetch failed, so holes from a bad signal stayed blank even after the network recovered. Add a healer: every 30s, when OSM is reachable, re-fetch MISSING tiles (current zoom) for the visible area and along the ridden route, cache them, and redraw. Gentle to OSM (one-tile probe, 300ms throttle, <=40 fetches/cycle); respects offline mode. Wired on record/detail/compare/roads maps, stopped on screen change.
This commit is contained in:
parent
d4dda3da0c
commit
3f092cced0
5 changed files with 148 additions and 6 deletions
27
docs/session-logs/2026-10-19_tile-healer.md
Normal file
27
docs/session-logs/2026-10-19_tile-healer.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Сессия 2026-10-19 (доб.) - онлайн-долечивание пустых тайлов
|
||||
|
||||
## Причина (из диагностики ранее)
|
||||
`createTile` (tilecache.js) при падении фетча не ретраит: Leaflet метит тайл
|
||||
loaded-with-error и не перезапрашивает, пока тайл не пересоздан (панорама/зум/redraw/
|
||||
новая карта). Поэтому дырки от плохого сигнала в поездке висели даже после возврата связи
|
||||
(подтверждено: офлайн ВЫКЛ, OSM через VPN отдавал 200, но пустые тайлы не оживали).
|
||||
|
||||
## Сделано (фича по запросу пользователя)
|
||||
tilecache.js - хилер:
|
||||
- `probeOsm()` - navigator.onLine + один тайл 0/0/0.png (таймаут 6с) = OSM доступен.
|
||||
- `startHealer(map, layer, pointsFn)` / `stopHealer()` - раз в 30с, если онлайн и не
|
||||
offline-режим: собирает недостающие тайлы на ТЕКУЩЕМ зуме по видимой области + (если
|
||||
pointsFn есть) вдоль маршрута (rotating cursor по длинному треку, чтобы не бурстить),
|
||||
фетчит с OSM, кэширует, по заполнению `layer.redraw()`. Лимиты: троттл 300мс, ≤40
|
||||
фетчей/цикл, ≤500 lookups/цикл - бережно к политике OSM (без массовой скачки).
|
||||
Также немедленный проход по событию `online` и через 3с после открытия карты.
|
||||
- Решения пользователя: зум - только текущий; охват - запись + просмотр.
|
||||
|
||||
main.js - подключение: хилер стартует на картах записи (pointsFn = точки текущей записи),
|
||||
детали трека (точки трека), сравнения треков и экрана "Дороги" (оба - по видимой области,
|
||||
pointsFn=null); глушится в `renderScreen` при уходе с экрана (и на map 'unload').
|
||||
|
||||
## Проверка
|
||||
Синтаксис JS ок (tilecache.js, main.js). На телефоне: открыть трек с дырявыми тайлами при
|
||||
живой сети - в течение ~30с дырки на текущем зуме заполняются; при офлайн-режиме докачки нет;
|
||||
нагрузка на OSM ограничена троттлингом. Живую проверку делает пользователь.
|
||||
Loading…
Add table
Add a link
Reference in a new issue