Avez-vous déjà entendu parler de FrankenPHP ? et bien c’est l’alliance du Go et du PHP … enfin, pas tout à fait, c’est plutôt Go qui rend service à PHP en vue de lui donner un petit coup de boost mais comment ? Détaillons tout celaFrankenPHP est une technologie émergente qui transforme le paysage du développement PHP. En combinant performance et flexibilité, FrankenPHP offre aux développeurs un outil puissant pour créer des applications web modernes et efficaces
Qu’est-ce que FrankenPHP ?
FrankenPHP est un framework PHP conçu pour optimiser les performances des applications web. Il se distingue par sa capacité à gérer des charges de travail élevées tout en maintenant une faible consommation de ressources. Grâce à son architecture modulaire, FrankenPHP permet aux développeurs de créer des applications évolutives et maintenables.
Si vous développez des projets à l’aide de framework bien connus comme Symfony ou Laravel par exemple, des projets tout faits sont proposés, il ne vous rester plus qu’à les prendre et à commencer à développer
Quels sont les avantages de FrankenPHP ?
FrankenPHP booste vos applications PHP avec des fonctionnalités avancées telles que les Early Hints, le mode worker, les capacités en temps réel, l’HTTPS automatique, ainsi que le support d’HTTP/2 et HTTP/3. Mais ce n’est pas tout, FrankenPHP peut vous proposer de construire votre application PHP comme un binaire autonome qui empacte le code source PHP et un serveur Web, à savoir Caddy ici
On peut noter également que FrankenPHP a un mode worker et permet surtout de mettre en place tous les systèmes d’optimisation comme par exemple le préchargement de l’application en mémoire, le JIT etc …. Ainsi, vous vous retrouvez avec une application PHP en mémoire, pour la mettre à jour, il vous faut alors redémarrer le serveur Web
Techniquement, FrankenPHP est un nouvel SAPI et donc possède toutes les fonctionnalités standard de PHP, aucune incompatibilité n’est possible.
Pourquoi utiliser FrankenPHP ?
De notre côté, nous mettons en œuvre FrankenPHP dès lors que nous devons réaliser des micro-services en PHP. Notre but est d’avoir un container Docker qui soit le livrable et contienne donc le code et le serveur Web paramétré pour la production. Si nous devons faire une évolution, nous remplaçons l’image Docker par une nouvelle version, le démarrage étant très bref et relativement court, l’indisponibilité du micro-service est infime et peut être gérée par la mise en place d’un loadbalancer.
On pourrait tout à fait aller plus loin et utiliser la fonctionnalité pour créer un binaire, que l’on peut ou non empaqueter dans un container Docker très basique mais nous trouvons que cela complexifie le système pour pas grand chose
Avec FrankenPHP, nous avons trouvé un runtime équivalent à ce que nous connaissons quand nous développons en JavaScript / TypeScript, Java/Kotlin ou bien encore Python et Golang, à savoir une application et son serveur Web livré en une seule fois, le serveur Web est taillé au besoin de l’application et la configuration en est d’autant simplifiée
Si une faille de sécurité surgit, il nous suffit de déployer une nouvelle version via notre outil de CI/CD et tout le parc sera ainsi up-to-date
Comment le tester ?
Tout simplement en utilisant Docker et la commande suivante et pour un projet sous Symfony :
docker run -v $PWD:/app/public -p 80:80 -p 443:443 -p 443:443/udp --tty my-php-app
Pour les utilisateurs du framework Laravel, c’est la commande suivante qui doit être lancée
docker run -p 80:80 -p 443:443 -p 443:443/udp -v $PWD:/app dunglas/frankenph
Via les paramètres de la commande -e, vous pouvez passez des variables d’environnement et par exemple tester en mode PRODUCTION avec Symfony