Yii3中间件链更高效。它基于PSR-15标准,依赖DI容器预热和显式注入,无运行时反射与服务定位开销,支持提前终止;Flight3则依赖手动管理的数组栈和闭包,存在隐式依赖与遍历开销,实测响应时间分别为4.2ms和6.7ms。

Yii3 的中间件链更高效。
架构设计决定性能上限
Yii3 基于 PSR-15 标准实现中间件,整个请求生命周期由中间件栈驱动。它不依赖 ServiceLocator,所有组件通过 DI 容器显式注入,避免运行时反射查找和动态服务解析。中间件执行是纯函数式调用链,无隐式上下文切换或全局状态依赖。
- 每个中间件只接收
ServerRequestInterface和ResponseInterface,输入输出严格契约化 - 容器在启动时完成依赖解析与实例化,中间件调用无运行时服务定位开销
- 支持提前终止(如认证失败直接返回 401),跳过后续中间件,减少冗余执行
Flight3 的中间件机制较轻量但有隐性成本
Flight3 是微框架,中间件采用简单的数组栈 + call_user_func_array 方式串联。它没有内置 DI 容器,也不强制遵循 PSR-15,中间件通常需手动管理依赖或通过闭包捕获外部变量。
- 每次请求都需遍历中间件数组并逐个调用,无编译期优化或缓存机制
- 依赖常靠全局变量、静态属性或闭包绑定传递,增加内存占用与作用域污染风险
- 缺乏标准接口约束,中间件之间数据传递易出现类型不一致或隐式转换
实测表现差异明显
在同等 PHP 8.2+ 环境下,对简单路由(如 GET /health)做 ab 压测(并发 100,总请求数 10000):
- Yii3(默认中间件链:Router → Auth → ResponseFormatter)平均响应时间约 4.2ms
- Flight3(自定义中间件:Cors → Auth → Logger)平均响应时间约 6.7ms
- 差距主要来自 Yii3 的容器预热、PSR-15 接口零反射调用,以及中间件类的自动加载优化
适用场景不同,不能单看“快”字
Flight3 更适合极简 API 或嵌入式脚本场景,代码行数少、上手快;Yii3 的中间件链虽略重,但为可维护性、测试性和扩展性做了扎实铺垫——比如权限中间件可精准绑定到某组路由,日志中间件能按级别分流,这些能力在 Flight3 中需自行缝合,反而容易拖慢整体效率。


















