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