baldav/docs/session-logs/2026-10-19_tile-healer.md
4aiman 3f092cced0 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.
2026-10-19 20:07:05 +03:00

2.6 KiB
Raw Blame History

Сессия 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 ограничена троттлингом. Живую проверку делает пользователь.