# 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. ## 2026-09-28: oxy-core history of a loaded state `log_for_path_in` and `blame_in` rebuilt and rendered the whole state on every call, and the log was built twice. oxy-core now has `log_of(state)`, `log_for_path_of(state, path, limit)` (the path found in the tree alone, stopping at `limit`) and `blame_of(state, tree, path)`, and the hub passes the state it already holds. First views after a restart (every cache empty, including the state cache): | Page | Before any cache | Cold now | Warm | |---|---:|---:|---:| | `docs/spec.md` | 196 ms | 146 ms | 8 ms | | `crates/oxy-core/src/repo/mod.rs` | 400 ms | 256 ms | 17 ms | | `crates/oxy-core/src/state.rs` | 317 ms | 121 ms | 16 ms | | `…/state.rs?blame=1` | 428 ms | 88 ms | 24 ms |