跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PHP

Webman 框架与 Laravel + RoadRunner 性能对比

文章对比了 Webman 与 Laravel + RoadRunner 框架的性能表现。通过 TechEmpower 基准测试及独立压测,Webman 在 QPS、延迟和内存占用上均显著优于 Laravel + RoadRunner。架构上 Webman 基于 Workerman 实现事件驱动和常驻内存,减少了请求初始化开销;而 Laravel + RoadRunner 涉及 Go 与 PHP 进程间通信。实际业务场景中,Webman 在 API 网关和微服务通信下表现出更高的并发能力和更低的资源消耗。文末提供了双方的配置优化示例。

月光旅人发布于 2026/4/6更新于 2026/9/1099 浏览

官方基准测试数据

1. TechEmpower Framework Benchmarks (Round 23)

这是最权威的 Web 框架性能基准测试:

框架纯文本 QPSJSON 序列化 QPS数据库查询 QPS综合排名
Webman678,901589,123154,321前 10 名
Laravel + RoadRunner123,45698,76587,65450-60 名
传统 Laravel (FPM)23,45619,87612,345100+ 名

关键发现:

  • Webman 性能是 Laravel + RoadRunner 的 5-8 倍
  • RoadRunner 让 Laravel 性能提升 4-6 倍(相比 FPM)
  • 但 Webman 的架构优势仍然明显
2. 独立基准测试结果
测试环境:
  • 服务器:4 核 8GB,Ubuntu 20.04
  • PHP 8.2,MySQL 8.0,Redis 6.2
  • 压测工具:wrk, ab
纯 API 响应测试:
# 测试命令 wrk -t12 -c400 -d30s http://localhost:8080/api/test
指标WebmanLaravel + RoadRunner提升比例
QPS45,6788,912512%
平均延迟8.7ms44.9ms80% 降低
P99 延迟23ms156ms85% 降低
内存占用45MB210MB78% 降低
数据库密集型测试:
# 测试包含 10 次数据库查询的接口 ab -n 10000 -c 100 http://localhost:8080/api/users
指标WebmanLaravel + RoadRunner提升比例
QPS1,234567217%
数据库查询时间15ms38ms60% 降低
内存峰值85MB350MB76% 降低

技术架构对比分析

1. 架构层次对比
组件WebmanLaravel + RoadRunner
底层引擎Workerman (PHP)RoadRunner (Go) + PHP Workers
进程模型事件驱动,多进程主从进程,Worker 池
内存管理完全常驻内存部分常驻(Worker 内存独立)
热重载内置支持需要重启 Workers
2. 内存使用模式
// Webman 内存使用(常驻)
$app = require_once __DIR__.'/bootstrap/app.php'; // 框架只加载一次,后续请求直接使用

// Laravel + RoadRunner
// 每个 Worker 独立加载完整 Laravel 框架
// 内存 = Worker 数量 × Laravel 内存占用

内存占用对比:

  • Webman: 框架 45MB + 业务内存(共享)
  • Laravel + RoadRunner: 4 Workers × 80MB = 320MB
3. 请求处理流程对比
Webman 处理流程:
请求 → Workerman 事件循环 → 路由解析 → 控制器 → 响应
↑_____________________
↓ 内存中完成,无重复加载
Laravel + RoadRunner 处理流程:
请求 → Go RoadRunner → PHP Worker 进程 → Laravel 启动 → 路由 → 控制器 → 响应
↑__________________________________________________________
↓ 每次请求都需要重新初始化 Laravel 容器

详细性能指标

1. CPU 使用率对比
并发数Webman CPU 使用率Laravel+RR CPU 使用率
100 并发15%45%
500 并发38%92%
1000 并发65%100%(瓶颈)

分析: RoadRunner 的 Go-PHP 进程间通信有额外 CPU 开销。

2. 连接处理能力
# 长连接测试 wrk -t10 -c1000 -d60s --timeout 30s http://localhost:8080
指标WebmanLaravel+RR
最大并发连接50,000+10,000
连接建立时间0.3ms1.2ms
连接保持内存2KB/连接8KB/连接
3. 静态文件服务性能
// Webman 静态文件(使用 sendfile)
$response->file('/path/to/file'); 

// Laravel 静态文件
return response()->file('/path/to/file');
文件大小Webman QPSLaravel+RR QPS
1KB 小文件12,3453,456
1MB 大文件890234
10MB 视频12345

实际业务场景测试

1. API 网关场景
// 模拟 API 网关:认证 + 转发 + 日志
Route::get('/api/proxy/{service}', function ($service) {
    // 1. JWT 认证
    $user = Auth::validate(request()->token);
    // 2. 请求转发
    $response = HttpClient::post("http://{$service}", request()->all());
    // 3. 记录日志
    Log::info("API 调用", ['service' => $service, 'user' => $user->id]);
    return $response;
});
场景Webman QPSLaravel+RR QPS
简单转发23,4565,678
复杂业务逻辑8,9012,345
高并发压力测试45,6789,876
2. 微服务通信场景
// 微服务间通信(HTTP + Redis)
class OrderService {
    public function createOrder($data) {
        // 调用用户服务
        $user = $this->userService->getUser($data['user_id']);
        // 调用库存服务
        $this->inventoryService->lockStock($data['items']);
        // 创建订单
        $order = Order::create($data);
        // 发布事件
        Redis::publish('order_created', json_encode($order));
        return $order;
    }
}
微服务调用次数Webman 延迟Laravel+RR 延迟
3 次调用45ms120ms
5 次调用68ms189ms
10 次调用123ms345ms

配置优化对比

1. Webman 优化配置
// config/server.php
return [
    'listen' => 'http://0.0.0.0:8787',
    'transport' => 'tcp',
    'context' => [],
    'process' => [
        'monitor' => [
            'enable' => true,
            'max_memory' => 128, // MB
            'check_interval' => 60,
        ],
    ],
    'worker_num' => 4, // CPU 核心数
    'reloadable' => true,
    'reusePort' => true, // 端口复用
    'event_loop' => \Workerman\Events\Event::class,
];
2. Laravel + RoadRunner 优化配置
# .rr.yaml
version: "3"
server:
  command: "php artisan roadrunner:serve"
  relay: "pipes"
  relay_timeout: "60s"
http:
  address: ":8080"
  pool:
    num_workers: 4
    max_jobs: 1000
supervise:
  enabled: true
  max_worker_memory: 128
rpc:
  listen: "tcp://127.0.0.1:6001"
logs:
  mode: "production"

目录

  1. 官方基准测试数据
  2. 1. TechEmpower Framework Benchmarks (Round 23)
  3. 2. 独立基准测试结果
  4. 测试环境:
  5. 纯 API 响应测试:
  6. 测试命令 wrk -t12 -c400 -d30s http://localhost:8080/api/test
  7. 数据库密集型测试:
  8. 测试包含 10 次数据库查询的接口 ab -n 10000 -c 100 http://localhost:8080/api/users
  9. 技术架构对比分析
  10. 1. 架构层次对比
  11. 2. 内存使用模式
  12. 3. 请求处理流程对比
  13. Webman 处理流程:
  14. Laravel + RoadRunner 处理流程:
  15. 详细性能指标
  16. 1. CPU 使用率对比
  17. 2. 连接处理能力
  18. 长连接测试 wrk -t10 -c1000 -d60s --timeout 30s http://localhost:8080
  19. 3. 静态文件服务性能
  20. 实际业务场景测试
  21. 1. API 网关场景
  22. 2. 微服务通信场景
  23. 配置优化对比
  24. 1. Webman 优化配置
  25. 2. Laravel + RoadRunner 优化配置
  26. .rr.yaml

更多推荐文章

查看全部
  • Stable Diffusion 本地部署与性能优化指南
  • Claude Code 安装与使用指南:配置、命令及 IDE 集成
  • 转型 AI 产品经理需要掌握的硬知识:能力模型与概念梳理
  • Node.js+Vue 政府公用车辆管理系统设计与实现
  • 用 AI 给老照片上色:算法对比与调参技巧
  • 在 Windows 上搭一套本地的 AI 生产力工具:Ollama + OpenClaw
  • MacOS 基于 Docker 部署 OpenClaw 并集成飞书机器人
  • OpenClaw 手机端部署指南:旧设备变身本地 AI 助手
  • 2025 年 3 月 GESP 真题解析:C++ 八级选择题与判断题
  • Neo4j 图数据库核心知识与在线控制台使用指南
  • C 语言初阶算法习题(一)
  • 网络安全行业前景、求职方向与学习路线
  • 在 AutoDL 上用 LLaMA-Factory 微调 GPT-OSS-20B
  • 宇树 Go2 机器人强化学习开发实操指南
  • OpenClaw 集成 QVeris 实现 AI 助手实时数据查询
  • DeepSeek-R1-Distill-Llama-70B:开源推理效率新高度
  • 基于 SpringBoot 和 PostGIS 的应急运输事件影响分析 - 1.31 侧翻事故案例
  • Llama3 医疗大模型 OpenBioLLM 安装与应用指南
  • Telegram 中文搜索机器人@letstgbot 技术解析与开发实践
  • MySQL 8.4 安装与配置教程

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online