changelog: document 2026-05-19 performance improvements

This commit is contained in:
Davide Scaini
2026-05-19 20:19:11 +02:00
parent 84eff1f3b0
commit 418e3a13e8
+50
View File
@@ -1,5 +1,55 @@
# Changelog
## [unreleased] — 2026-05-19
### Performance — activity detail page
Four targeted fixes that together eliminate the blank loading screen and
reduce timeseries payload size for the dominant use case.
**sessionStorage summary passthrough** (`ActivityFeed.svelte`,
`ActivityDetailLoader.svelte`): when the user clicks an activity from the
feed, the summary object is written to sessionStorage before navigation and
read back synchronously at module init on the detail page — before the first
render. The "Loading activity…" screen and the two sequential index-fetch
round trips are eliminated entirely for this path. Direct URLs and bookmarks
fall through to the existing slow path unchanged.
**Spatial 10 m downsampling** (`bincio/extract/timeseries.py`): timeseries
are now downsampled to one sample per 10 m of distance traveled (GPS
haversine primary, speed × Δt fallback) instead of one per second. Indoor
activities with neither GPS nor speed data are left at 1 s resolution.
Running activities see ~67 % fewer points; long cycling rides ~30 %. A
`bincio render --downsample-timeseries` migration flag retroactively
downsamples all existing stored files without re-extracting from FIT/GPX.
**nginx timeseries caching** (`deploy/vps/nginx-activity.conf`): a regex
location block before the generic `/data/` handler serves `*.timeseries.json`
with `Cache-Control: public, max-age=3600, stale-while-revalidate=3600`.
Previously every page view triggered a conditional GET even when nothing had
changed.
**asyncio.to_thread for segment_efforts** (`bincio/serve/routers/activities.py`):
the synchronous file scan in `GET /api/activities/{id}/segment_efforts` is
now dispatched via `asyncio.to_thread` so it runs in a thread pool instead of
blocking the event loop during concurrent fetches.
### Performance — static asset caching
**Immutable JS/CSS caching** (`deploy/vps/nginx-activity.conf`): Astro
content-hashes all `/_astro/*.js` and `/_astro/*.css` filenames at build time.
A new nginx location block serves them with `max-age=31536000, immutable` so
browsers never revalidate until the hash changes. HTML pages get an explicit
`no-cache, must-revalidate` header so the latest asset URLs are always fetched
after a deploy.
### Tooling
**VPS backup script** (`deploy/vps/backup-vps.sh`): extended to pull
`nginx-wiki.conf` and `nginx-planner.conf` in addition to the existing files.
---
## [0.1.0] — 2026-04-22
### Improvement — DEM & hysteresis algorithm refinements