Présentation HN : HTMX Playground, implémenté à 100 % dans le navigateur
(lassebomh.github.io)- Un bac à sable de code qui permet de commencer immédiatement à expérimenter HTMX dans le navigateur, sans installation ni configuration locale
- Dans
server.js, il gère les endpoints et le rendu de templates, tandis qu’un serveur simulé dans le navigateur intercepte les requêtes HTMX - Le traitement des requêtes et l’approche par templates seront familiers aux utilisateurs de Django, et l’outil peut aussi servir à tester des bibliothèques autres que HTMX
- Le partage se fait en exportant via « Copy as JSON », puis en saisissant l’URL raw d’un Gist dans « Load Playground »
- Attention à l’absence de navigation entre pages, à la prise en charge mobile limitée et à la perte possible des mises à jour d’état de
on.get("/")due au chargement initial de l’iframe
Un bac à sable HTMX exécuté dans le navigateur
- HTMX Playground est un simple bac à sable de code permettant d’expérimenter HTMX sans installation
- Il propose des exemples adaptés à partir des exemples d’origine de htmx.org
- Il permet d’écrire du code dans le navigateur avec un flux proche de celui d’un backend
- Définir des endpoints dans
server.js - Rendre directement des templates
- Un serveur simulé intercepte les requêtes sortantes de HTMX
- Définir des endpoints dans
- Le traitement des requêtes et le moteur de templates ont une forme familière pour les utilisateurs de Django
- Le projet lui-même n’est pas limité à HTMX et permet aussi d’essayer d’autres bibliothèques
- Le code est disponible sur GitHub
Mode d’enregistrement et de partage, et limites connues
-
Enregistrement et partage
- Cliquer sur « Copy as JSON » en haut à droite pour copier le contenu
- Téléverser le contenu copié dans un Gist
- Saisir l’URL raw dans « Load Playground »
- Une fois l’URL de la page mise à jour, elle peut être partagée
-
Limites
- Il n’y a pas de navigation entre pages
- La prise en charge mobile est limitée
server.jspeut conserver un état, comme dans l’exemple Click to Edit- Si l’état est mis à jour dans la vue
on.get("/"), cette mise à jour peut disparaître- Car le chargement initial de la page est d’abord récupéré dans une iframe distincte avant de mettre à jour l’iframe affichée à l’écran
-
Bibliothèques utilisées
- Svelte
- Ace
- PollyJS
- Nunjucks
1 commentaires
Avis de Hacker News
Je suis le créateur de htmx, et je trouve ça vraiment génial ; merci beaucoup de l’avoir fait
Sur une page existante, quand on remplit et soumet un formulaire, la réponse revient sous forme de page complète ; si l’on pouvait dire à htmx « une page complète va revenir, mais ne mets à jour que #my-form », il ne serait pas nécessaire d’ajouter côté serveur des branches du type « si c’est une requête htmx »
Ce serait utile pour ceux qui veulent que leur site fonctionne sans JavaScript, et cela permettrait aussi de gérer plusieurs fonctionnalités — commentaires, abonnements e-mail, boutons J’aime — avec un seul endpoint backend
J’ai envisagé d’utiliser HTMX sérieusement, mais je crains que le vivier de développeurs soit trop réduit, ce qui compliquerait le recrutement
J’étais habitué à des frameworks propriétaires proches de Thymeleaf, comme l’isml d’Intershop, et récemment je comptais passer à une stack frontend Angular parce qu’il est plus facile de recruter des développeurs frontend dédiés
Une approche comme htmx peut devenir complexe, les développeurs n’ont pas envie de se battre contre un monstre de spaghetti, et si le frontend ne fait que produire du HTML tandis que le backend doit tout assembler, les développeurs backend peuvent devenir le goulot d’étranglement
Je me demande si HTMX a pris en compte ces pièges, et comment il y répond
Cela dit, HTMX ne résout pas toutes les situations ; il y a aussi des cas où l’on a besoin d’une application monopage utilisant un framework JavaScript
Les frameworks comme Angular apportent de la structure, mais la complexité reste là, et elle peut même être bien plus grande
Au final, ce qu’il faut, c’est un développeur frontend qui connaît bien la stack web — JavaScript, CSS, HTML, API du navigateur — ; cette personne saura choisir les outils et frameworks adaptés à la tâche, et apprendra très vite quelque chose comme HTMX
https://risingstars.js.org/2023/en#section-framework
Juste derrière React, et devant Vue, Svelte et Angular ; de ce point de vue, l’avenir semble donc prometteur. Cela dit, je m’attends à ce que son classement baisse une fois l’enthousiasme initial retombé
htmx est assez simple, et la plupart des développeurs web peuvent l’apprendre en une journée environ, mais son mode de développement pousse l’organisation vers un paradigme full-stack où le développeur possède une fonctionnalité de bout en bout ; il faut donc un changement de mentalité non seulement chez les développeurs, mais aussi chez les PM et les architectes
Il existe aussi un livre gratuit en ligne : https://hypermedia.systems
En plus de la documentation (https://htmx.org/docs, environ une heure de lecture), il y a des articles qui traitent des questions philosophiques et pratiques autour de htmx et de l’hypermédia en général : https://htmx.org/essays
htmx repose sur très peu d’idées de base, et il cherche à être « extensible », avec des comportements utiles comme le chargement différé réalisables au moyen de deux attributs : https://htmx.org/examples/lazy-load
En même temps, il offre des hooks comme les événements ou les filtres d’événements, ainsi que des fonctionnalités plus profondes, ce qui permet d’obtenir le comportement voulu quand on creuse davantage
Le code spaghetti est un risque permanent dans tout développement logiciel, et personnellement je n’ai jamais été convaincu que les bibliothèques d’applications monopages l’empêchaient
Avec htmx, il vaut mieux concentrer l’effort sur le backend et bien décomposer l’application avec les outils fournis par l’environnement côté serveur
Comme htmx permet de choisir n’importe quelle technologie serveur, il offre davantage d’options et de paradigmes pour organiser la logique applicative qu’une application monopage, où une grosse application JavaScript/TypeScript existe déjà côté frontend et pousse souvent le backend dans la même direction
J’ai aussi essayé de résumer ici pour quels types d’applications htmx est un bon choix : https://htmx.org/essays/when-to-use-hypermedia/
htmx est un bon outil dans de nombreux cas, mais ce n’est qu’un outil, pas une solution miracle pour le développement web
En gros, on recrute un développeur backend capable de faire un peu de frontend ; il n’a pas besoin d’avoir HTMX sur son CV, seulement quelques bases comme JavaScript
La plupart des développeurs web remplissent cette condition
J’utilise MapLibre avec Django et htmx ; je devrais mettre en ligne un exemple pour pouvoir le partager avec d’autres
Personne ne l’utilise, mais j’aimerais bien voir ce projet aussi
Monaco ne fonctionne pas sur mobile par conception, donc je crois qu’ils utilisent Ace sur mobile
C’était du moins le cas la dernière fois que j’ai consulté l’issue GitHub
[0] https://github.com/Microsoft/monaco-editor/issues/246
Est-ce que ça prend aussi en charge ActiveX ?
Dans les premières versions, toute l’UI était en ActiveX, et je garde le souvenir de tas de barres de progression installant des DLL
On pourrait aussi fabriquer ce genre de chose avec un Service Worker, et permettre de naviguer en ouvrant plusieurs pages dans d’autres onglets
Ça ne devrait pas être si difficile, et pour générer les pages on pourrait utiliser du JavaScript pur ou ce que l’utilisateur veut
Puisque c’est fait avec Svelte, où sont passés les puristes du MPA et leurs fourches ?
J’aime le concept de htmx et j’ai commencé à lire le livre aujourd’hui, mais chaque fois que je me dis qu’il faudra peut-être un jour prendre aussi en charge des applications mobiles natives, ça me fait hésiter à l’utiliser
Dans ce cas, j’ai l’impression qu’il faudrait réécrire non seulement le frontend, mais aussi une bonne partie du backend
Je connais hyperview.org, mais une application React Native ne suffit pas pour les cas d’usage qui m’intéressent
Il suffit de garder la logique métier en dehors des contrôleurs
Je me demande s’il y a des gens qui créent des apps hors ligne avec un serveur virtuel défini dans un Service Worker et un modèle de requêtes-réponses HTML/HTMX
J’aime htmx, mais je n’ai pas pu l’utiliser dans des situations où il fallait aussi fonctionner hors ligne
Si on pouvait exécuter tel quel le code serveur dans un worker, ce serait un hack formidable
En théorie, n’importe quelle pile serveur auto-hébergeable peut convenir
L’objectif est de produire un binaire unique sans dépendance à des services externes, et j’utilise Go
Beaucoup de composants sont déjà bien en place, comme un service local avec mise à jour automatique et une base de données répliquée, et il est aussi facile de compiler en cross-compilation pour plusieurs systèmes d’exploitation et architectures
Comme alternative au fait de tout mettre dans le navigateur, cette approche me semble assez pertinente, à condition de pouvoir lancer un processus séparé
Cela dit, j’aimerais bien que Go ait une gestion des permissions à la Deno
J’utilise ce pattern pour toutes mes applis personnelles, avec toutefois une petite bibliothèque maison de type htmx
Passer à HTMX ne me semblerait pas très difficile
Je me demande si transposer HATEOAS vers des applications desktop ou mobiles serait une bonne idée ; ça pourrait faire une expérience intéressante
Ça fonctionne bien, mais ce n’est pas aussi flexible que le web, et il faut développer chaque écran linkable de manière strictement boîte noire
La tentative était intéressante, mais je ne suis pas sûr de la valeur que ça aurait en production
REST a été bienvenu parce qu’il a simplifié les monstres SOAP, mais il a aussi apporté pas mal de dogmatisme
Je comprends l’objectif fondamental de REST, puisqu’il aligne des concepts, des données et une architecture de services qui sont naturels pour l’utilisateur
Mais HATEOAS m’a semblé être le résultat d’une envie d’avoir plus de dogmatisme et d’esbroufe en réunion d’architecture, plutôt que de se concentrer sur la question de savoir si l’expérience utilisateur s’améliore grâce au modèle
Je me demande s’il existe un exemple d’UI qui montre pourquoi HATEOAS devrait être pris comme principe de base
En gros, chaque page a des liens vers « ce qu’il faut faire ensuite », et HATEOAS me donne l’impression d’être une manière tape-à-l’œil d’apporter ce modèle d’état aux appels de services REST