frankenphp开启worker模式后qps更高、ttfb更稳(5–15ms vs 30–80ms)、p99延迟更低且cpu指令数减少15%–25%,因其php常驻内存免去每次初始化开销,并内置caddy省去nginx与fpm间通信。

直接压测对比最直观:用相同硬件、相同 PHP 项目、相同接口,分别跑 FrankenPHP(开启 worker 模式)和 Nginx + PHP-FPM,看 QPS、平均延迟、CPU 和内存占用的真实差异。
测试前必须统一的环境条件
否则数据不可比。重点控制这四点:
- PHP 版本和扩展完全一致:比如都用 PHP 8.3,且 opcache.enable=1、opcache.preload 开启方式、apcu 扩展等配置要一模一样;FrankenPHP 内置的 PHP 运行时需确认版本号与 FPM 一致
- 应用代码零改动:不为 FrankenPHP 做特殊优化,也不给 FPM 加缓存层;Laravel/Symfony 项目确保 .env、config 缓存已生成,避免干扰启动开销
-
请求路径和参数固定:例如只压测
/api/user这个纯逻辑接口,禁用 session、CSRF、日志写入等副作用;用 curl 或 wrk 发送相同 body 和 header -
关闭无关服务并隔离资源:停掉数据库连接池、Redis 监控、后台任务队列;用
cgroup或 Docker 限制 CPU 核心数和内存上限,防止系统调度干扰
关键指标怎么抓
别只看“QPS 高了 2 倍”这种模糊说法,盯住三个维度:
- 首字节时间(TTFB):反映框架初始化+路由解析的真实开销。FrankenPHP 的 worker 模式会让这个值稳定在 5–15ms;FPM 通常在 30–80ms 波动,尤其高并发时明显拉长
- 99 分位延迟(p99):比平均延迟更有参考价值。FPM 在流量突增时 p99 容易飙升到 500ms+,FrankenPHP 因常驻内存更平稳
-
单位请求 CPU 时间:用
perf stat -e cycles,instructions,cache-misses对比。FrankenPHP 减少了进程创建、socket 通信、上下文切换,指令数通常少 15%–25%
推荐的压测工具和命令
轻量、可控、结果可复现:
-
wrk(推荐):
wrk -t4 -c100 -d30s http://localhost/api/user—— 4 线程、100 并发、持续 30 秒,输出包含每秒请求数、延迟分布 -
ab(基础验证):
ab -n 10000 -c 100 http://localhost/api/user—— 快速看吞吐极限,注意它不支持 HTTP/2,测 FrankenPHP 的 HTTP/3 能力要用其他工具 -
自定义脚本 + time + curl:循环 100 次请求,用
time curl -s -o /dev/null ...记录每次耗时,算标准差——能暴露毛刺和抖动
容易被忽略但影响结论的细节
这些点不处理,测试结果可能误导决策:
-
FPM 的 pm 配置要调优到合理水平:不能用默认
pm = dynamic+pm.max_children = 5就去比,应根据内存预估设为 20–50,并开启pm.status_path观察实际活跃 worker 数 -
FrankenPHP 必须启用 worker 模式:默认是“每次请求重启 PHP”,性能接近 FPM;启动时加
--workers参数或 Caddyfile 中配php_worker,否则测的是“单体 Web 服务器”的网络层优势,不是 PHP 性能提升 -
静态文件不参与对比:Nginx 返回静态资源极快,FrankenPHP 也支持,但这类请求无法体现 PHP 层差异;专注测
.php或框架路由接口
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











