OXYGENHUB
◆ v0.4.1 oxygenhub / docs / performance.md
2.2 KiB · Markdown · last changed Performance notes: cold views after the oxy-core change 1 month ago renderedsource blame history raw
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
| Page | Before | Render caches | + last change and blame | 
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.
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
| Page | Before any cache | Cold now | Warm |
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 |