| 8d194f03 Andy McCall ↶ |
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. |
| 2d58f17e Andy McCall ↶ |
33 |
|
| 34 |
## 2026-09-28: oxy-core history of a loaded state |
| 35 |
|
| 36 |
`log_for_path_in` and `blame_in` rebuilt and rendered the whole state on |
| 37 |
every call, and the log was built twice. oxy-core now has `log_of(state)`, |
| 38 |
`log_for_path_of(state, path, limit)` (the path found in the tree alone, |
| 39 |
stopping at `limit`) and `blame_of(state, tree, path)`, and the hub passes |
| 40 |
the state it already holds. First views after a restart (every cache |
| 41 |
empty, including the state cache): |
| 42 |
|
| 43 |
|
| 44 |
|
| 45 |
| `docs/spec.md` | 196 ms | 146 ms | 8 ms | |
| 46 |
| `crates/oxy-core/src/repo/mod.rs` | 400 ms | 256 ms | 17 ms | |
| 47 |
| `crates/oxy-core/src/state.rs` | 317 ms | 121 ms | 16 ms | |
| 48 |
| `…/state.rs?blame=1` | 428 ms | 88 ms | 24 ms | |