yggdrasil/DEVELOPMENT.md
xfy e12e59461b
Some checks failed
CI / check (push) Successful in 12m26s
CI / build (push) Failing after 13m0s
docs: 整理表格格式并添加 CI 链接
2026-06-15 10:41:03 +08:00

71 lines
2.2 KiB
Markdown

# Development Guide
## Performance Testing
### Prerequisites
Install hey (HTTP load generator) and samply (profiler):
```bash
brew install hey
cargo install samply
```
### Benchmark
```bash
# 1. Build release binary
make build
# 2. Start server
./target/dx/yggdrasil/release/web/server
# 3. Run load test (in another terminal)
hey -c 100 -n 100000 http://localhost:8080/
```
### Flame Graph
```bash
# 1. Build with debug symbols (required for readable flame graphs)
CARGO_PROFILE_RELEASE_DEBUG=1 make build
# Terminal 1: Start profiling
samply record -- ./target/dx/yggdrasil/release/web/server
# Terminal 2: Wait for server to start, then send load
hey -c 100 -n 100000 http://localhost:8080/
# Terminal 1: Ctrl+C after hey finishes — samply opens flame graph in browser
```
### Key Metrics to Watch
| Metric | Description |
| -------------------- | ---------------------------- |
| Requests/sec | Throughput |
| Average latency | Mean response time |
| P99 latency | Tail latency |
| Status codes | Error rate (should be 0) |
| Latency distribution | Consistency (tight = stable) |
### Flame Graph Hotspots
| Expected Hotspot | Code Location | Cause |
| --------------------------------- | ---------------- | -------------------------------------------- |
| SSR rendering | Dioxus framework | Virtual DOM diff + render per request |
| `deadpool` connection acquisition | `src/db/mod.rs` | Connection pool contention under concurrency |
| `moka` cache lookup | `src/cache.rs` | Cache hit/miss overhead |
| `tokio` scheduling | tokio runtime | Async task dispatch |
| `serde` serialization | Models | Post/User serialization |
### Tuning
- `DB_POOL_SIZE` — increase if `deadpool` / `Semaphore` shows high in flame graph
- `SSR_CACHE_SECS` — increase to cache SSR output longer
- `TOKIO_WORKER_THREADS` — explicitly set worker thread count
## CI
https://git.rua.plus/api/v1/repos/xfy/yggdrasil/actions/tasks