PHP API 基准测试对比指南
核心测试类别
框架性能对比
Laravel vs Symfony vs Phalcon vs Slim
- 测试 REST API 响应时间
- 测试 GraphQL 端点性能
- 中间件堆栈影响
版本性能对比
PHP 7.4 → 8.0 → 8.1 → 8.2 → 8.3
- JIT 编译器影响
- 类型系统优化
- match 表达式性能
配置对比
- OPcache 开启/关闭
- 不同的 PHP-FPM 进程数
- JIT 配置参数(缓冲区大小、触发频率)
基准测试工具
推荐工具链
# 1. Apache Bench (AB) ab -n 10000 -c 100 http://your-api.com/endpoint # 2. wrk (更现代) wrk -t12 -c400 -d30s http://your-api.com/endpoint # 3. Siege siege -c100 -t60s http://your-api.com/endpoint # 4. k6 (JS脚本支持) k6 run --vus 100 --duration 30s benchmark.js
PHP 专用工具
// 简单基准测试类
class PerformanceBenchmark {
private $startTime;
private $memoryStart;
public function start() {
$this->startTime = microtime(true);
$this->memoryStart = memory_get_usage();
}
public function end($label) {
$time = microtime(true) - $this->startTime;
$memory = memory_get_usage() - $this->memoryStart;
echo sprintf("[%s] Time: %.4fs | Memory: %d bytes\n",
$label, $time, $memory);
}
}
测试指标
关键指标
- RPS (Requests Per Second) - 每秒请求数
- P95/P99 延迟 - 95%/99% 百分位响应时间
- 吞吐量 - 成功请求/失败请求比例
- 资源消耗 - CPU、内存、IO
示例测试脚本
#!/bin/bash
# benchmark.sh
ENDPOINTS=(
"GET http://localhost/api/users"
"POST http://localhost/api/users"
"GET http://localhost/api/users/1"
)
for endpoint in "${ENDPOINTS[@]}"; do
echo "Testing: $endpoint"
wrk -t12 -c400 -d60s "$endpoint"
echo "---"
done
环境标准化
必须控制变量
# 测试环境配置 hardware: cpu: "相同核心数" ram: "相同内存大小" disk: "SSD优先" software: php_version: "准确指定" web_server: "Nginx/Apache" opcache: "统一配置" network: local_testing: "避免网络延迟" keepalive: "统一开启/关闭"
常见测试陷阱
未预热
// 预热代码
for ($i = 0; $i < 100; $i++) {
file_get_contents("http://localhost/api/prepare");
}
内存泄漏
# 监控内存使用
while true; do
ps -o pid,%cpu,%mem,rss,command -p $(pgrep -f php-fpm) | tail -n +2
sleep 1
done
SQL 查询差异
// 使用统一的数据库配置
define('DB_DSN', 'mysql:host=localhost;dbname=benchmark');
define('DB_USER', 'bench_user');
define('DB_PASS', 'bench_pass');
报告生成
格式化输出示例
Benchmark Results (1000 requests, 100 concurrent)
=================================================
| Framework | RPS | P95 (ms) | P99 (ms) | Memory |
|-----------|---------|----------|----------|--------|
| Laravel | 450 | 245 | 380 | 32MB |
| Slim | 1200 | 89 | 150 | 8MB |
| Phalcon | 1800 | 62 | 110 | 6MB |
| Plain PHP | 2500 | 45 | 78 | 4MB |
进阶技巧
分布式测试
# 使用多台机器压测
seq 1 5 | xargs -P5 -I{} ssh worker-{} \
"wrk -t12 -c400 -d60s http://master-node/api"
数据库基准
-- 测试 API 涉及的所有查询 EXPLAIN ANALYZE SELECT * FROM users WHERE id = 1;
缓存策略对比
// 测试不同缓存方案
$strategies = ['none', 'file', 'redis', 'apcu'];
foreach ($strategies as $strategy) {
// 配置缓存
Benchmark::run($strategy);
}
最佳实践清单
- [ ] 使用最新稳定版 PHP
- [ ] 开启 OPcache 并配置优化
- [ ] 关闭 Xdebug 扩展
- [ ] 使用 Production 模式
- [ ] 预热应用和数据库连接池
- [ ] 多次运行取平均值
- [ ] 记录完整的环境配置
- [ ] 测试真实业务场景,而非空路由
需要我针对某个具体框架或场景展开详细测试方案吗?

版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播