Un desarrollador de Teradion, un software de gestión para despachos contables franceses, migró una aplicación Symfony de nginx más PHP-FPM a FrankenPHP en modo worker. El resultado, de memoria y sin benchmarks formales, fue una mejora de alrededor del 20 %, muy lejos del 3,5x promocionado en la página de FrankenPHP. La aplicación dedica la mayor parte del tiempo a extraer declaraciones y plazos de seis sistemas externos.

Al buscar el origen de la cifra de 3,5x, el autor no encontró ninguna metodología publicada. Los benchmarks del repositorio de demostración datan de octubre de 2022, miden latencia con baja carga y con un sleep en el script, no incluyen ninguna cifra de RPS, y muestran el modo clásico incluso más lento que FPM. El issue #481 de GitHub, que pide benchmarks reproducibles, lleva abierto desde enero de 2024.

Una comparación de Tideways de septiembre de 2025 puso las expectativas en perspectiva: con metodología publicada (Hetzner CCX33, Vegeta), no halló prácticamente ninguna diferencia de rendimiento ni de throughput entre PHP-FPM y FrankenPHP en modo clásico. La conclusión del autor: la mejora proviene del modo worker, que no reinicia la aplicación en cada petición, no del servidor en sí. Cambiar nginx por Caddy manteniendo el modo clásico es migrar para nada.

Varios obstáculos costaron tiempo. Tras el cambio, muchos archivos quedaron con permisos 0600 — incluida la clave privada JWT —, lo que provocó errores 500 en el login sin nada en los logs. Una variable de entorno en systemd requería barras invertidas dobles en las directivas Environment; las simples se rechazan y, mediante EnvironmentFile, se eliminan, en contra de lo que dice la documentación oficial. El worker no arrancaba.

El problema más grave fue el estado que sobrevivía entre peticiones: un filtro permanecía activo de una petición a la siguiente y rompía los logins de forma intermitente. Es un comportamiento documentado: FrankenPHP indica que el estado estático persiste por diseño y que $_ENV no se reinicia; Symfony advierte que el estado capturado por el kernel o sus servicios puede filtrarse si los servicios no implementan ResetInterface. La depuración se alargó por PrivateTmp, que ocultaba los logs escritos en /tmp, y porque getSubscribedEvents se compila: reiniciar no basta, hay que limpiar la caché.

A pesar de la modesta ganancia de velocidad, el autor considera que la migración mereció la pena por la simplicidad operativa: un binario y una configuración en lugar de nginx más php-fpm, y sin gestión de certificados. El artículo de Tideways también menciona la reducción de complejidad operativa. El autor no encontró ningún caso de estudio público con cifras reales de producción e invita a otros a compartir los suyos.