changelog: document 2026-05-19 performance improvements
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user