Performance notes
2026-09-28: render and history caches (hub spec §16.3)
Earth, OxygenHub on its own disk, median of seven requests per page with
curl, the oxygen repository (about 900 changes). File pages were the
slow ones; the raw bytes of the same files took 5 ms, so the time was in
rendering and in history, not in reading the state.
| Page | Before | Render caches | + last change and blame |
|---|---|---|---|
oxygen/file/main/docs/spec.md (129 KB of Markdown) | 196 ms | 192 ms | 8 ms |
oxygen/file/main/crates/oxy-core/src/repo/mod.rs | 400 ms | 205 ms | 18 ms |
oxygen/file/main/crates/oxy-core/src/state.rs (962 lines) | 317 ms | 196 ms | 14 ms |
…/state.rs?blame=1 | 428 ms | 303 ms | 23 ms |
oxygen overview | 8 ms | 7 ms | 7 ms |
oxygen/changes/main | 26 ms | 27 ms | 27 ms |
What was cached, all in memory, bounded, least recently used first:
- Rendered Markdown by the text and its two link bases (32 MiB).
- Highlighted files by file name and text (64 MiB).
- A file's last change by state and path (4 MiB): it was found with
log_for_path_in, which rebuilt the whole state and read every change on each view. It is the biggest single win. - Blame by state and path (64 MiB).
A state is content addressed, so none of these can go stale; what can change (bookmark and tag labels on a change) is still worked out on every view. The first view of a file still pays the full cost once.
?plain=1 downloads no longer compute the last change or the sidebar.