{
  "schemaVersion": 1,
  "id": "20260927-runtime-optimizations",
  "title": "Runtime optimizations",
  "createdAt": "2026-09-27T18:09:04.069Z",
  "status": "complete",
  "selection": {
    "name": "full",
    "reason": "Single full run selected before measurement; publication is a separate explicit command.",
    "selectedAt": "2026-09-27T18:09:04.070Z"
  },
  "notes": [
    {
      "kind": "decision",
      "title": "Fusor runtime optimizations from pull request #9",
      "body": "This run measures the Fusor runtime optimizations in pull request #9 (branch perf/runtime-optimizations) at commit fdbac71, with no uncommitted source changes. The six other framework applications, their dependencies and the harness are unchanged from 20260923-seven-framework-baseline. That record measured an earlier Fusor commit, 47660e5, so the differences below also include the refactors merged to main between the two commits. Pull request #9 has a same-session paired comparison against the branch's base commit, 636e729.\n\nBuild: release profile, Binaryen 132 -O3, wasm-bindgen 0.2.117, stripped Wasm names, installed Chrome 153.0.8010.53, and BENCH_SEED=20261004. These are the same settings, framework order, rustc and Node as the previous published run. All 133 timing metrics, seven memory profiles, and 21 bundle fixtures passed the evaluator. Source and production artifact receipts matched before and after measurement.\n\nRecorded 2026-09-27T18:09:06.668Z on Apple M4 Pro, darwin 24.5.0, browser 153.0.8010.53, 15 samples after 3 warmups.\n\nMedian milliseconds:\n\n| Metric | fusor | react | svelte | solid | vue | preact | leptos |\n| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |\n| ssr-1000 | 0.26 | 0.88 | 0.31 | 0.27 | 0.92 | 0.99 | 0.51 |\n| ssr-10000 | 2.90 | 13.52 | 3.85 | 3.04 | 10.59 | 16.71 | 5.63 |\n| initial-1000 | 2.20 | 1.90 | 4.00 | 1.20 | 3.20 | 2.80 | 3.20 |\n| initial-10000 | 21.30 | 19.80 | 134.20 | 12.50 | 36.40 | 30.60 | 31.60 |\n| single | <0.10 | 0.70 | 0.70 | <0.10 | <0.10 | <0.10 | <0.10 |\n| bulk-1000 | 0.40 | 2.00 | 1.30 | 0.40 | 1.80 | 1.60 | 0.50 |\n| bulk-10000 | 2.70 | 9.10 | 8.10 | 3.70 | 16.20 | 17.90 | 4.60 |\n| insert | 0.50 | 2.10 | 9.00 | 0.30 | 7.30 | 2.40 | 0.40 |\n| delete | 0.40 | 2.50 | 8.30 | 0.20 | 7.30 | 2.40 | 0.40 |\n| swap | 0.70 | 117.60 | 7.50 | 0.70 | 4.90 | 2.50 | 0.30 |\n| computed | <0.10 | 0.90 | 0.80 | <0.10 | <0.10 | <0.10 | <0.10 |\n| fanout-1000 | 0.20 | 0.90 | 0.20 | 0.20 | 1.70 | 1.50 | 2.30 |\n| fanout-10000 | 2.90 | 9.50 | 3.80 | 2.70 | 22.90 | 17.90 | 213.20 |\n| fanin | 0.30 | 0.10 | 4.10 | 0.50 | 3.90 | 0.10 | 0.90 |\n| unmount | 4.70 | 4.10 | 2.70 | 1.00 | 5.50 | 2.10 | 6.70 |\n| events | 15.50 | 46.80 | 27.20 | 20.00 | 36.50 | 28.20 | 15.20 |\n| hydration-1000 | 7.30 | 6.50 | 10.10 | 3.70 | 9.40 | 7.10 | 5.80 |\n| hydration-10000 | 34.70 | 111.20 | 124.50 | 20.30 | 41.80 | 89.50 | 28.40 |\n| startup | 18.00 | 22.30 | 18.40 | 9.70 | 17.70 | 13.30 | 18.80 |\n\nGzip KiB per fixture:\n\n| Fixture | fusor | react | svelte | solid | vue | preact | leptos |\n| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |\n| benchmark workload | 110.1 | 67.4 | 14.5 | 6.1 | 26.3 | 8.5 | 68.8 |\n| hello | 56.3 | 66.3 | 9.2 | 4.0 | 23.2 | 4.9 | 25.5 |\n| todo | 108.2 | 67.1 | 13.9 | 6.8 | 25.2 | 6.3 | 63.3 |\n\nAgainst 20260923-seven-framework-baseline, compare reports no environment differences. These Fusor medians changed by more than any of the other six frameworks moved on the same metric:\n\n- initial-1000: 3.20 → 2.20 ms (−31%). initial-10000: 32.10 → 21.30 ms (−34%).\n- bulk-10000: 3.90 → 2.70 ms (−31%).\n- insert: 2.10 → 0.50 ms (−76%). delete: 2.10 → 0.40 ms (−81%). swap: 1.30 → 0.70 ms (−46%).\n- fanin: 0.50 → 0.30 ms (−40%).\n- hydration-1000: 9.60 → 7.30 ms (−24%). hydration-10000: 40.30 → 34.70 ms (−14%).\n- startup: 28.70 → 18.00 ms (−37%).\n\nOther Fusor rows are not clearly outside the noise:\n\n- unmount went from 5.50 to 4.70 ms (−15%), while React, Solid and Svelte moved −13% to −21% without code changes.\n- fanout-10000 went from 4.10 to 2.90 ms (−29%), while Solid moved −23%.\n- events stayed at 15.50 ms.\n- bulk-1000 and fanout-1000 changed by one 0.10 ms clock step.\n- ssr-1000 changed by 0.07 ms, and ssr-10000 (+5%) moved within the other frameworks' range of −17% to +14%.\n- single and computed remain below the clock floor.\n\nFusor's JS heap growth was 1.38 MiB with 10,000 rows (previously 2.50 MiB) and 18.11 MiB with 100,000 rows (previously 30.30 MiB). After the large allocation and repeated cycles, it retained 3.75 MiB above its idle page (previously 3.50 MiB). The idle page itself used 0.39 MiB less heap. Wasm capacity was 18.88 MiB with 10,000 rows (previously 18.63 MiB) and 169.00 MiB after the large allocation (previously 167.56 MiB); Wasm capacity is reserved capacity, not live Rust allocations. DOM nodes returned to the idle count after every cycle. The idle page has five more nodes: the preload links in the new production HTML. Fusor's gzip fixtures grew from 105.0 to 110.1 KiB (benchmark), 54.0 to 56.3 KiB (Hello), and 100.2 to 108.2 KiB (Todo). Other frameworks' fixtures are unchanged.\n\nLimits:\n\n- One local Apple M4 Pro, with no CPU or network throttling and no thermal controls.\n- Chromium timing results only.\n- 15 samples, with the maximum as P95.\n- Startup uses fresh browser contexts with a reused browser process.\n- Values below 0.10 ms are below the browser clock floor.\n- Other desktop applications, including a separate Chrome instance, were open. No builds or other benchmark processes ran during measurement.\n- Several other frameworks' medians moved by 20% or more between the two runs without code changes, for example React delete (1.80 → 2.50 ms) and Svelte swap (10.90 → 7.50 ms). This limits direct comparisons with the older run.",
      "format": "markdown",
      "recordedAt": "2026-09-27T18:17:33.438Z"
    }
  ],
  "events": [],
  "evidence": [
    {
      "name": "full",
      "kind": "measurement",
      "protocol": "full",
      "path": "data/full.json",
      "bytes": 152690,
      "sha256": "78fa6cfaec9567d3bc947f9ea0a75efdf04f87c01b256934b9c76fce1728433a",
      "sourceSha256": "e34761c01517288ecd0827b7f2404485d790e3d0543d13c691b828008b2936b9",
      "recordedAt": "2026-09-27T18:13:52.432Z"
    },
    {
      "name": "receipt",
      "kind": "receipt",
      "path": "data/receipt.json",
      "bytes": 18089,
      "sha256": "c0feec8776bea9498f66a3cfc5e9011b003febfb94c8c012419841d8645fd6fb"
    }
  ],
  "completedAt": "2026-09-27T18:17:40.814Z"
}
