performance-investigation
- Repo stars 86,684
- Author repo svelte
Quick start
- Start from a branch you want to measure (for example
foo). - Run:
pnpm bench:compare main foo
If you pass one branch, bench:compare automatically compares it to main.
Where outputs go
- Summary report:
benchmarking/compare/.results/report.txt - Raw benchmark numbers:
benchmarking/compare/.results/main.jsonbenchmarking/compare/.results/<your-branch>.json
- CPU profiles (per benchmark, per branch):
benchmarking/compare/.profiles/main/*.cpuprofilebenchmarking/compare/.profiles/main/*.mdbenchmarking/compare/.profiles/<your-branch>/*.cpuprofilebenchmarking/compare/.profiles/<your-branch>/*.md
The .md files are generated summaries of the CPU profile and are usually the fastest way to inspect hotspots.
Suggested investigation flow
- Open
benchmarking/compare/.results/report.txtand identify largest regressions first. - For each high-delta benchmark, compare:
benchmarking/compare/.profiles/main/<benchmark>.mdbenchmarking/compare/.profiles/<branch>/<benchmark>.md
- Look for changes in self/inclusive hotspot share in runtime internals (
runtime.js,reactivity/batch.js,reactivity/deriveds.js,reactivity/sources.js). - Make one optimization change at a time, then re-run targeted benches before re-running full compare.
Fast benchmark loops
Run only selected reactivity benchmarks by substring:
pnpm bench kairo_mux kairo_deep kairo_broad kairo_triangle
pnpm bench repeated_deps sbench_create_signals mol_owned
Tests to run after perf changes
Runtime reactivity regressions are most likely in runes runtime tests:
pnpm test runtime-runes
Helpful script
For quick cpuprofile hotspot deltas between two branches:
node benchmarking/compare/profile-diff.mjs kairo_mux_owned main foo
This prints top function sample-share deltas for the selected benchmark.
Practical gotchas
bench:comparechecks out branches while running. Avoid uncommitted changes (or stash them) so branch switching is safe.- Each
bench:comparerun rewritesbenchmarking/compare/.resultsandbenchmarking/compare/.profiles.
- Fluxly category
- AI
- Author-declared agents
- No explicit declaration found; this is not inferred or tested compatibility
- Static check
- 88 / 100 · heuristic scan, not runtime safety proof
- Author / version / license
- @sveltejs · no license declared
- Fluxly token estimate
- Lean
- Fluxly setup estimate
- Plug-and-play
- External API key
- No requirement detected
- Detected OS requirements
- macOS · Linux · Windows
- Runtime requirements
- Node.js
- Detected file/system behavior
-
- Read-only
- Detected network behavior
- Local-only
- Install commands
- None (reference only)
Profile is derived at build time from SKILL.md and install vectors. Subject to drift from author intent.
Heads up: 未限定 allowed-tools,默认拥有全部工具权限。
# Where outputs go
- Summary report: `benchmarking/compare/.results/report.txt`
- Raw benchmark numbers:
- `benchmarking/compare/.results/main.json`
- `benchmarking/compare/.results/<your-branch>.json`
- CPU profiles (per benchmark, per branch):
- `benchmarking/compare/.profiles/main/*.cpuprofile` Start from a branch you want to measure (for example foo). Run: If you pass one branch, bench:compare automatically compares it to main.
Open benchmarking/compare/.results/report.txt and identify largest regressions first. For each high-delta benchmark, compare: benchmarking/compare/.profiles/main/<benchmark>.md
## Quick start
1. Start from a branch you want to measure (for example `foo`).
2. Run:
```sh
pnpm bench:compare main foo
```
If you pass one branch, `bench:compare` automatically compares it to `main`.
## Where outputs go
- Summary report: `benchmarking/compare/.results/report.txt`
- Raw benchmark numbers:
- `benchmarking/compare/.results/main.json`
- `benchmarking/compare/.results/<your-branch>.json`
- CPU profiles (per benchmark, per branch):
- `benchmarking/compare/.profiles/main/*.cpuprofile`
- `benchmarking/compare/.profiles/main/*.md`
- `benchmarking/compare/.profiles/<your-branch>/*.cpuprofile`
- `benchmarking/compare/.profiles/<your-branch>/*.md`
The `.md` files are generated summaries of the CPU profile and are usually the fastest way to inspect hotspots.
## Suggested investigation flow
1. Open `benchmarking/compare/.results/report.txt` and identify largest regressions first.
2. For each high-delta benchmark, compare:
- `benchmarking/compare/.profiles/main/<benchmark>.md`
- `benchmarking/compare/.profiles/<branch>/<benchmark>.md`
3. Look for changes in self/inclusive hotspot share in runtime internals (`runtime.js`, `reactivity/batch.js`, `reactivity/deriveds.js`, `reactivity/sources.js`).
4. Make one optimization change at a time, then re-run targeted benches before re-running full compare.
## Fast benchmark loops
Run only selected reactivity benchmarks by substring:
```sh
pnpm bench kairo_mux kairo_deep kairo_broad kairo_triangle
pnpm bench repeated_deps sbench_create_signals mol_owned
```
## Tests to run after perf changes
Runtime reactivity regressions are most likely in runes runtime tests:
```sh
pnpm test runtime-runes
```
## Helpful script
For quick cpuprofile hotspot deltas between two branches:
```sh
… Author text anchors workflow facts; Fluxly only indexes current sections, terms, files, and commands.
sections -> Quick start → Where outputs go → Suggested investigation flow → Fast benchmark loops → Tests to run after perf changes → Helpful script
terms -> 1. Start from a branch you want to measure (for example foo). · If you pass one branch, bench:compare automatically compares it to main. · The .md files are generated summaries of the CPU profile and are usually the fastest way to inspect hotspots. · 1. Open benchmarking/compare/.results/report.txt and identify largest regressions first. · This prints top function sample-share deltas for the selected benchmark. · - bench:compare checks out branches while running.
files/cmd -> foo · bench:compare · main · benchmarking/compare/.results/report.txt · benchmarking/compare/.results/main.json · benchmarking/compare/.results/<your-branch>.json · benchmarking/compare/.profiles/main/.cpuprofile · benchmarking/compare/.profiles/main/.md
body sha256 -> 898549e48cd3
Decide Fit First
Design Intent
How To Use It
Boundaries And Review