- Phoenix LiveView offre une grande efficacité à la fois en vitesse de l’application et en vitesse de développement
- L’un de ses avantages est de permettre une approche monolithique dans un langage unique, sans avoir à maintenir séparément le frontend et le backend
- Rails Hotwire et Laravel Livewire ont aussi été envisagés, mais la mise en place y demande davantage de configuration pour le temps réel et les tâches en arrière-plan
- Le framework Phoenix d’Elixir conserve l’élégance de Ruby on Rails tout en offrant des performances nettement supérieures, avec des tâches en arrière-plan via Oban intégrées par défaut, ainsi qu’une syntaxe familière et propre
- LiveView fournit des mises à jour bidirectionnelles en temps réel via WebSocket, en trouvant un équilibre entre le rendu serveur traditionnel et les frameworks centrés sur le frontend, avec la possibilité d’utiliser Alpine.js ou des bibliothèques JavaScript via des hooks si nécessaire
- La rapidité de développement, la forte capacité de concurrence, la possibilité d’écrire l’essentiel dans un seul langage, la prévention en amont des bugs grâce au compilateur et l’architecture tolérante aux pannes d’Elixir/Erlang ont été les facteurs décisifs du choix final
Pourquoi avoir choisi Phoenix LiveView
- Le but du code est de résoudre un problème de la manière la plus optimale possible, et les critères les plus importants ici étaient la vitesse de l’application et l’efficacité du développement
- Avec React ou Next.js associés à Laravel, ou encore Inertia.js avec Laravel, il faut maintenir à la fois la stack frontend et la stack backend
- En tant que développeur solo, il n’y avait pas le temps de gérer l’état à deux endroits différents, et il fallait donc une solution monolithique robuste capable de tout gérer ensemble
-
Comparaison des alternatives : Laravel Livewire, Rails Hotwire, Next.js
- Laravel Livewire et Rails Hotwire sont d’excellents outils pour simplifier le travail frontend sans dépendre fortement de JavaScript
- Une stack 100 % JavaScript avec Next.js a été envisagée, mais l’usage de JavaScript côté backend n’était pas souhaité
- Rails Hotwire attirait particulièrement l’attention pour sa capacité à construire rapidement un MVP avec Rails
- Cependant, il fallait des tâches en arrière-plan, des mises à jour en temps réel et une communication bidirectionnelle ; c’est également possible avec Rails et Laravel, mais cela demande davantage d’efforts de configuration
-
Les avantages décisifs d’Elixir, Phoenix et LiveView
- Elixir et Phoenix conservent l’élégance de Ruby on Rails tout en offrant des performances bien supérieures
- Les tâches en arrière-plan intégrées via Oban, une syntaxe familière et lisible, ainsi que la communication bidirectionnelle en temps réel de LiveView constituent leurs grands points forts
- LiveView trouve un équilibre idéal entre le rendu côté serveur et les frameworks très chargés côté frontend
- Il permet des mises à jour en temps réel via WebSocket et l’intégration de bibliothèques JavaScript (par exemple Alpine.js)
- Avec Oban intégré, Phoenix facilite la déclaration des jobs en arrière-plan et leur reprise automatique
-
Les avantages d’Elixir/Erlang
- Elixir est un langage compilé construit sur Erlang, à la base de systèmes à très grande concurrence comme WhatsApp ou Discord
- Il offre une forte concurrence, une tolérance aux pannes et une récupération automatique après incident
Raisons du choix final
- Développement rapide et forte prise en charge de la concurrence
- Possibilité d’implémenter presque tout dans un langage unique
- Écriture d’un code lisible
- Le compilateur détecte la plupart des bugs avant la mise en production
- Une architecture tolérante aux pannes qui fait que l’application tombe rarement en panne, garantissant ainsi sa stabilité
Conclusion et conseil
- Phoenix n’est pas systématiquement supérieur à Rails, Laravel ou Next.js
- Tous ces frameworks sont excellents, et chacun a été utilisé sur divers projets
- Pour cette situation précise et ce projet (Hyperzoned.com), Phoenix était le meilleur choix
- En explorant au-delà de ce que l’on connaît déjà, on peut trouver une manière meilleure et plus efficace de résoudre le problème suivant
- Ne cessez jamais d’apprendre
3 commentaires
Pour les mêmes raisons qu’avec JSP, j’ai l’impression qu’au-delà d’un certain niveau, ça devient inutilisable.
Avis Hacker News
J’ai déjà intégré CKEditor moi-même avec Rails, Livewire, Phoenix et React. Parmi eux, du point de vue de l’expérience développeur, Phoenix a été de loin le plus impressionnant. Le framework est extrêmement bien conçu, ce qui a rendu l’intégration vraiment simple. Je n’ai jamais ressenti ce niveau de satisfaction avec Rails ni avec React, surtout pas avec Next.js. Avec Next.js, le routeur change beaucoup trop souvent, et comme tout évolue en permanence, je n’arrive pas à lui faire confiance. Livewire donne une impression proche de Phoenix, mais c’est relativement moins intuitif et moins riche en fonctionnalités. Par exemple, Livewire ne prend pas en charge les slots de composants, alors que Phoenix les gère sans problème. Sans slots, la structure des templates devient vite chaotique et le code inutilement complexe. Si ça intéresse quelqu’un, voir le GitHub de ckeditor5-phoenix
La combinaison PHP (Laravel) + JQuery reste tout à fait utilisable en 2025. En revanche, personnellement, je n’ai pas envie d’utiliser Livewire. Node.js peut être moins productif, mais il devient pertinent quand on a besoin de fonctionnalités plus puissantes. Il prend en charge async/await, socket.io et TypeScript. Next.js est utile quand on a besoin à la fois de SEO et d’une UI interactive, mais combien de sites ont réellement besoin de tout cela en même temps ? Peut-être seulement des services comme LinkedIn
Je ne pense pas que Livewire soit une copie de Phoenix. Le nom pourrait le laisser croire, mais à ma connaissance les deux projets ont commencé quasiment en même temps, et Livewire est même plus ancien. Hotwire est arrivé le plus tard. Les deux projets adoptent des approches différentes, car PHP et Elixir ont des caractéristiques trop éloignées. Je trouve aussi Livewire assez utile. Comme il n’est pas facile d’utiliser les WebSocket en PHP, il fonctionne surtout via HTTP, et dans la plupart des cas cela suffit. À l’inverse, les WebSocket de LiveView peuvent être excessifs
Je serais curieux d’avoir des détails concrets sur les problèmes rencontrés avec Rails. J’aimerais savoir ce qui a été difficile
Je serais curieux de savoir ce qui a été compliqué avec Rails
Livewire 4 doit ajouter la prise en charge des slots de composants. Mais il reste encore quelques semaines. La nouvelle version devrait aussi améliorer les performances et le confort de développement
Cet article donne l’impression que l’auteur défend le framework qu’il a choisi tout en ignorant volontairement les fonctionnalités des autres. Tous les avantages de Phoenix mentionnés ici existent aussi dans Rails. En plus, le texte laisse entendre que Rails ne permet pas la communication entre le front-end et les WebSocket, ce qui est totalement faux pour quiconque a construit une app avec Rails au cours des trois dernières années. Bien sûr, Phoenix et LiveView sont de très bons outils, mais si je continue à utiliser Rails, c’est grâce à Hotwire Native. Cela me donne un énorme avantage de productivité, car je peux créer seul à la fois des apps mobiles et web en très peu de temps
Je n’ai pas beaucoup utilisé Ruby, mais au-delà de la communauté, je me demande en quoi Ruby on Rails serait supérieur à Elixir & Phoenix. Grâce à la plateforme BEAM, je considère en théorie Phoenix comme très supérieur pour les systèmes soft real-time, la tolérance aux pannes, les NIFs, le modèle acteur, les innombrables processus légers, une concurrence facile à raisonner, la programmation fonctionnelle, OTP et un GC sans interruption. Cela dit, chacun utilise ce qu’il préfère, et je compte aussi essayer Hotwire Native
Il est clair que Rails peut aussi communiquer avec le front via WebSocket. Cela dit, je suis développeur Rails et si j’avais besoin d’un grand nombre de connexions socket persistantes, je choisirais Phoenix. Phoenix peut couvrir 100 000 connexions socket de façon bien moins chère et plus simple sur des services comme Gigalixir. Si on gère soi-même l’infrastructure, c’est une autre histoire. Mais sur Heroku, il est difficile de gérer ne serait-ce que quelques milliers de connexions, et le coût devient vite lourd
Je me demande où, dans le texte, il est dit que Rails ne prend pas en charge la communication WebSocket avec le front. Dans l’original, il est seulement écrit que « c’est faisable à la fois dans Rails et Laravel, mais que cela prend un peu plus de temps à configurer ». Ce n’est pas du tout la même nuance
La combinaison Rails + Hotwire est elle aussi très puissante, et encore plus avec Hotwire Native. Le point principal de cet article n’est pas de dire que Phoenix et LiveView sont meilleurs, mais que la structure de LiveView (état piloté par le serveur, séparation des processus, canaux légers, etc.) est adaptée à certains cas. Les deux écosystèmes résolvent des problèmes similaires de manières différentes. Rails mise sur les conventions et l’amélioration progressive, Phoenix sur la concurrence et la tolérance aux pannes de BEAM. Au final, l’important est de savoir quelle architecture correspond le mieux au produit que l’on construit
J’avais déjà entendu parler de Hotwire Native, mais j’ai l’impression que les nouvelles se sont calmées depuis. Je serais curieux d’avoir des retours d’expérience sur de vraies apps mobiles, ainsi que sur le support, la documentation et le niveau de finition de l’implémentation
Moi aussi, j’ai une vision très positive d’Elixir, presque autant que l’auteur, mais après trois ans d’utilisation en production comme CTO, j’ai aussi ressenti de plus en plus de limites à mesure que l’échelle augmentait. BEAM (concurrence, tolérance aux pannes) a bien tenu ses promesses, et Ecto, Oban,
remote iexainsi que le vivier de talents étaient excellents. Mais l’expérience développeur (DX) est devenue peu à peu un goulot d’étranglement. Sur un gros projet de 300 000 lignes, j’ai rencontré les problèmes suivants :Si vous réfléchissez à un stack à utiliser sur le long terme, le billet 3-year Retrospective peut être utile
Je suis très surpris d’apprendre qu’une compilation dans l’environnement de développement Elixir puisse prendre plus de 10 secondes. J’avais toujours entendu dire qu’Elixir apportait davantage de bénéfices que Rails, donc je me demande si ce genre de cas est fréquent en conditions réelles
J’ai eu une expérience similaire en apprenant Elixir. J’aimais bien le langage, mais en travaillant sous Windows avec WSL, le LSP plantait souvent, ce qui était pénible. J’espère que cela s’améliorera nettement avec la sortie prochaine du LSP officiel
Que ce soit avec LiveView ou React, si le front-end n’est pas bien maîtrisé, le code devient vite désordonné dans une grosse application. Plus l’équipe grandit, plus les revues de code et le nettoyage de la logique inutile deviennent indispensables. J’ai l’impression que c’est pareil pour tous les frameworks. Il reste encore énormément de marge de progression
L’article affirme que « les jobs en arrière-plan, les mises à jour en temps réel et la communication bidirectionnelle légère sont tous possibles dans Rails et Laravel avec juste un peu de configuration supplémentaire », mais Rails prend déjà en charge Solid Queue (jobs) et Solid Cable (messagerie temps réel) par défaut
Depuis que je suis passé récemment à Rails, je trouve que SolidQueue est vraiment très simple à utiliser avec la configuration de base. En ajoutant même Solid Queue Dashboard, on peut avoir une vue d’ensemble très claire
Si l’on parle uniquement de messagerie temps réel, je trouve que la configuration de Solid Cable est plus fastidieuse que LiveView. LiveView va plus loin, puisqu’il gère aussi le rendu, et je pense qu’il est bien en avance sur le développement avec SolidCable dans Rails
Toutes ces fonctionnalités sont également possibles avec Rails. C’est un très beau framework, et avec Phoenix c’est plus simple et plus agréable. Je recommande vraiment de l’essayer au moins une fois
Ayant utilisé Rails et Elixir en production, je peux dire qu’ils ne sont absolument pas équivalents. Oban est clair à utiliser, et pour relancer un job il suffit de mettre à jour une colonne en base pour que le supervisor Oban s’en charge correctement. Avec Solid Queue, il n’y a pas de moyen simple de relancer un job réussi. Il y a aussi trop de tables, ce qui complique la gestion. Oban se contente de deux tables, fonctionne naturellement dans la même app, alors qu’avec Solid Queue il faut modifier des réglages après avoir lu plusieurs billets de blog pour que tout marche correctement. La configuration par défaut est insuffisante. Grâce aux caractéristiques d’Erlang/Elixir, Oban est remarquablement performant tout en restant très simple, ce qui est un vrai plaisir pour un développeur. J’utilise Solid Queue un peu par contrainte
Après avoir développé longtemps avec Rails, Phoenix/Elixir est devenu mon stack par défaut ces derniers temps. Rails reste vraiment le meilleur pour créer rapidement des apps CRUD, et sur ce point il est clairement excellent. Mais quand la complexité augmente et que le temps passe, Phoenix/Elixir devient globalement un meilleur outil
Depuis l’arrivée des LLM, ce genre d’app simple peut être généré en quelques minutes. En revanche, sur les parties vraiment importantes auxquelles il faut faire attention, j’ai l’impression que Phoenix donne plus de contrôle
J’aimerais entendre plus précisément ce qui te semble mieux convenir, et sur quels points tu le trouves supérieur
La phrase « nous écrivons du code pour résoudre les problèmes de la meilleure façon possible » laisse sentir une vraie passion. Moi, je suis plutôt du genre à être raisonnablement satisfait tant que ça marche, donc rester sur Rails me convient probablement mieux
On dit souvent que la communauté Elixir est petite, mais elle vise un niveau très élevé avec des bibliothèques de pointe. Cela me rappelle ce qu’avait dit un ancien développeur : « moins, c’est mieux ». Il y a aussi beaucoup de très bons projets open source, comme elixir-dbvisor/sql
Si vous voulez vraiment saisir la valeur d’Elixir, je recommande de regarder toutes les conférences de Saša Jurić
Cet article se concentre davantage sur Phoenix LiveView que sur le framework dans son ensemble. En pratique, je n’aime pas le fait que, même si on retire LiveView des options de génération dans Phoenix, il reste encore du code LV par-ci par-là
La seule raison pour laquelle je n’ai pas choisi Elixir, c’était l’absence de type checker. Je me demande si cela a évolué
Il est vrai que Livewire est amusant, mais dès que l’UI devient un peu plus complexe, ça tourne à l’enfer. À partir de ce moment-là, Phoenix perd brutalement ses avantages. Comme cela devient de plus en plus difficile à mesure que le cycle s’allonge, je ne peux pas vraiment le recommander.