Benchmarks
All benchmarks run on Docker with 2 CPU, 512MB RAM, 4 workers.
Raw JSON (no framework)
Minimal PHP handler returning {"status":"ok"}.
Tool: wrk -t4 -c100 -d30s
| Server | Req/sec | Errors |
|---|---|---|
| Swoole | 73,385 | 6K socket errors |
| Folk | 53,220 | 0 |
| RoadRunner | 17,165 | 0 |
| FrankenPHP | 3,892 | 0 |
Laravel /ping
Laravel application returning a JSON response from a route.
Tool: wrk -t4 -c50 -d30s
| Server | Req/sec |
|---|---|
| Folk | 3,703 |
| Swoole | 221* |
* Swoole benchmark image may be misconfigured.
Laravel Welcome Page
Full Laravel welcome page render.
Tool: wrk -t4 -c50 -d30s, no resource limits
| Setup | Req/sec |
|---|---|
| Folk (PHP 8.4 ZTS, crates.io) | 4,416 |
| Folk (PHP 8.3 ZTS, local) | 3,374 |
Methodology
- All tests use the same hardware and Docker resource limits
wrkruns from the host machine against the Docker container- Each test runs for 30 seconds after a warm-up period
- Folk uses ZTS mode with 4 worker threads
- Swoole, RoadRunner, and FrankenPHP use their default recommended configurations with 4 workers