FrankenPHP 是一个用 Go 编写并基于 Caddy Web服务器构建的 PHP 应用服务器。
Caddy 创建者 Matt Holt 表示,它可使 PHP 应用程序的性能提高一倍,并将开发人员和 DevOps 的工作量减少一半;而 Caddy 刚刚更新到 2.8 版本,现在后端已经实验性地支持 HTTP/3。
FrankenPHP 的作者是 Kevin Dunglas,他是 PHP 和 Go 的核心贡献者,也是流行的 PHP 网络框架 Symfony 的核心维护者。
Dunglas 结合自己在不同领域的知识,创建了 FrankenPHP,该版本于 2022 年 11 月在 SymfonyCon 上进行了预览,并于 2023 年 12 月发布了 1.0 版本。
FrankenPHP 专为容器部署而设计,包含 Caddy,后者也是用 Go 编写的,因此单个服务即可为 PHP 应用程序提供支持。FrankenPHP 在 MIT 许可下开源,代码位于 GitHub 上。
https://github.com/dunglas/frankenphp
这样将 PHP 运行时和 Web 服务器打包在一起可以大大提高性能。
Dunglas 提供的一项基准测试显示,Hello World Symfony 应用程序的 Web 请求平均需要 2.53 毫秒才能完成,而通常用于优化传统 Web 服务器性能的 PHP-FPM(FastCGI 进程管理器)则需要 9.45 毫秒。
FrankenPHP 在 Docker 容器中运行 API 平台
FrankenPHP 的其他功能包括自动生成 HTTPS 证书(得益于 Caddy 对 Let's Encrypt 或 ZeroSSL 的支持)、对 PHP 扩展(包括 OPCache 和 XDebug)的原生支持以及将应用程序保存在内存中的工作模式,以实现更快的响应。还支持结构化日志记录、Prometheus 指标和跟踪以及优雅重新加载(动态更新应用程序)。
预构建的容器适用于常用的 PHP 应用程序,包括 WordPress、Symfony、Drupal、Joomla、Laravel 和 API 平台,最后一个也是由 Dunglas 创建的。
Holt 是一名爱好者,他在在 Hacker News 上说道:“这有可能改变万维网(我非常谨慎地使用这个词,因为 PHP 为全球绝大多数互联网提供支持……网站性能几乎翻倍,而开发人员/devops 人员的工作量却减少一半,这并不罕见”。
不幸的是事情没那么简单。PHP 被广泛使用的原因很大一部分是因为 WordPress,而 Dunglas表示“与 Laravel 和 Symfony 不同,WordPress 不支持 FrankenPHP 的工作模式(目前还不支持),因此在性能方面没有太多好处(除了使用 103 Early Hints 预加载资产的能力,这可以将页面加载的延迟降低 30%)。”
在 Caddy 方面,据该团队称, 2.8 版是“迄今为止最大的 Caddy 更新之一”,其中包含数百项改进。其中包括对代理后端的快速 HTTP/3 协议的实验性支持、更新的自动证书更新(包括 ARI(ACME 更新信息)支持)以及性能改进(包括现在默认压缩更多媒体类型)。
Caddy 受到一部分用户的高度评价。其中一位用户表示:“它是一款出色的反向代理,并且凭借自动证书和 HTTP/3 支持开创了先河。”