HN-Vorstellung: HTMX Playground, zu 100 % im Browser umgesetzt
(lassebomh.github.io)- Eine Code-Sandbox, mit der man HTMX-Experimente direkt im Browser starten kann, ohne Installation oder lokale Einrichtung
server.jsbehandelt Endpunkte und Template-Rendering; HTMX-Requests werden von einem Mock-Server im Browser abgefangen- Request-Handling und Template-Ansatz sind Django-Nutzern vertraut und lassen sich auch für Experimente mit anderen Libraries als HTMX verwenden
- Teilen funktioniert, indem man per „Copy as JSON“ exportiert und die Gist-Raw-URL in „Load Playground“ einfügt
- Zu beachten sind fehlende Seitennavigation, eingeschränkter Mobile-Support und der mögliche Verlust von Status-Updates in
on.get("/")durch das initiale Laden des iframe
Eine HTMX-Sandbox, die im Browser läuft
- HTMX Playground ist eine einfache Code-Sandbox, mit der man HTMX ohne Installation ausprobieren kann
- Sie bietet Beispiele, die aus den ursprünglichen htmx.org-Beispielen adaptiert wurden
- Im Browser kann man Code in einem Backend-ähnlichen Ablauf schreiben
- In
server.jsdefiniert man Endpunkte - Templates können direkt gerendert werden
- Ein Mock-Server fängt ausgehende Requests von HTMX ab
- In
- Request-Handling und Template-Engine sind in einer Form gehalten, die Django-Nutzern vertraut ist
- Das Projekt selbst ist nicht auf HTMX beschränkt, sodass man auch andere Libraries ausprobieren kann
- Der Code ist auf GitHub veröffentlicht
Speichern, Teilen und bekannte Einschränkungen
-
Speichern und Teilen
- Oben rechts auf „Copy as JSON“ klicken, um den Inhalt zu kopieren
- Den kopierten Inhalt in einen Gist hochladen
- Die Raw-URL in „Load Playground“ eingeben
- Sobald die Seiten-URL aktualisiert wurde, kann sie geteilt werden
-
Einschränkungen
- Es gibt keine Seitennavigation
- Mobile-Support ist eingeschränkt
server.jskann wie im Beispiel Click to Edit Status halten- Wenn im
on.get("/")-View der Status aktualisiert wird, kann dieses Update verloren gehen- Grund ist, dass der initiale Seitenaufruf zuerst in einem separaten iframe erfolgt, bevor er das iframe auf dem Bildschirm aktualisiert
-
Verwendete Libraries
- Svelte
- Ace
- PollyJS
- Nunjucks
1 Kommentare
Hacker-News-Kommentare
Ich bin die Person, die htmx gemacht hat, und finde das wirklich großartig — vielen Dank, dass du das gebaut hast
Wenn man in einer bestehenden Seite ein Formular ausfüllt und absendet, kommt die Antwort als vollständige Seite zurück. Es wäre praktisch, htmx sagen zu können: „Die ganze Seite kommt zurück, aber aktualisiere nur #my-form“, sodass man auf dem Server keine Verzweigung wie „wenn es eine htmx-Anfrage ist“ einbauen muss
Das wäre gut für Leute, die möchten, dass ihre Website auch ohne JavaScript funktioniert, und man könnte mehrere Funktionen wie Kommentare, E-Mail-Abos und Like-Buttons über einen einzigen Backend-Endpunkt abwickeln
Ich habe überlegt, HTMX ernsthaft einzusetzen, aber ich habe Sorge, dass der Entwicklerpool zu klein ist und das Recruiting schwierig wird
Ich war an proprietäre Frameworks ähnlich wie Thymeleaf gewöhnt, etwa isml von Intershop, und wollte in letzter Zeit auf einen Angular-Frontend-Stack umsteigen, weil es leichter ist, dedizierte Frontend-Entwickler einzustellen
Ein Ansatz wie htmx kann kompliziert werden, Entwickler wollen nicht gegen ein Spaghetti-Monster kämpfen, und wenn das Frontend nur HTML erzeugt und das Backend alles zusammenkleben muss, könnten Backend-Entwickler zum Flaschenhals werden
Ich frage mich, ob HTMX diese Fallen berücksichtigt hat und wie es damit umgeht
HTMX löst allerdings nicht jede Situation, und es gibt Fälle, in denen man eine Single-Page-App mit einem JavaScript-Framework braucht
Frameworks wie Angular geben Struktur, aber die Komplexität bleibt bestehen und ist womöglich sogar deutlich größer
Was man letztlich braucht, sind Frontend-Entwickler, die den Web-Stack mit JavaScript, CSS, HTML und Browser-APIs gut verstehen; solche Leute können passende Tools und Frameworks für die Aufgabe auswählen und lernen auch HTMX sehr schnell
https://risingstars.js.org/2023/en#section-framework
Direkt hinter React und vor Vue, Svelte und Angular, daher sieht die Zukunft in dieser Hinsicht gut aus. Ich gehe aber davon aus, dass das Ranking sinken wird, sobald die anfängliche Begeisterung abflaut
htmx ist ziemlich einfach, sodass die meisten Webentwickler es in etwa einem Tag lernen können, aber der Entwicklungsansatz schiebt Organisationen in Richtung eines Full-Stack-Paradigmas, bei dem Entwickler eine Funktion vollständig verantworten. Das erfordert einen Denkwechsel nicht nur bei Entwicklern, sondern auch bei PMs und Architekten
Es gibt auch ein kostenloses Online-Buch: https://hypermedia.systems
Zusätzlich zur Dokumentation (https://htmx.org/docs, etwa eine Stunde Lesezeit) gibt es Texte zu philosophischen und praktischen Fragen rund um htmx und Hypermedia allgemein: https://htmx.org/essays
htmx versucht „erweiterbar“ zu sein, weil es nur sehr wenige Grundideen hat und nützliche Verhaltensweisen wie Lazy Loading schon mit zwei Attributen umsetzen kann: https://htmx.org/examples/lazy-load
Gleichzeitig gibt es Hooks wie Events oder Event-Filter und auch tiefere Funktionen, sodass man bei Bedarf tiefer einsteigen und das gewünschte Verhalten umsetzen kann
Spaghetti-Code ist in jeder Art von Softwareentwicklung immer ein Risiko, und ich war persönlich nie überzeugt, dass Single-Page-App-Bibliotheken Spaghetti-Code verhindern
Bei htmx ist es oft besser, die Anstrengung auf das Backend zu konzentrieren und die Werkzeuge der Serverumgebung zu nutzen, um die Anwendung sauber zu zerlegen
Weil htmx die Wahl beliebiger Servertechnologien erlaubt, gibt es mehr Optionen und Paradigmen zur Organisation der Anwendungslogik als bei Single-Page-Apps, bei denen eine große JavaScript-/TypeScript-App im Frontend oft auch das Backend in dieselbe Richtung drängt
Hier habe ich auch zusammengefasst, für welche Anwendungen htmx eine gute Wahl ist: https://htmx.org/essays/when-to-use-hypermedia/
htmx ist in vielen Fällen ein gutes Werkzeug, aber eben nur ein Werkzeug und keine Universallösung für Webentwicklung
Im Grunde stellt man Backend-Entwickler ein, die ein wenig Frontend können. HTMX muss also nicht im CV stehen; Grundlagen wie JavaScript reichen aus
Auf die meisten Webentwickler trifft das zu
Ich habe MapLibre zusammen mit Django und htmx verwendet und sollte wohl mal ein Beispiel hochladen, damit andere es ebenfalls nutzen können
Zwar benutzt es niemand, aber ich würde mir dein Projekt trotzdem gern anschauen
Soweit ich weiß, funktioniert Monaco auf Mobilgeräten absichtlich nicht, deshalb verwendet man dort Ace
Zumindest war das so, als ich zuletzt in die GitHub-Issues geschaut habe
[0] https://github.com/Microsoft/monaco-editor/issues/246
Unterstützt das auch ActiveX?
In den frühen Versionen bestand die gesamte UI aus ActiveX, und ich erinnere mich noch an jede Menge Fortschrittsbalken für die DLL-Installation
Damit ließe sich auch so etwas mit einem Service Worker bauen, und man könnte mehrere Seiten in anderen Tabs öffnen und darin navigieren
Das scheint nicht allzu schwer zu sein, und für die Seitenerzeugung könnte man reines JavaScript oder was auch immer der Nutzer möchte verwenden
Also wurde es mit Svelte gebaut; wo sind die MPA-Puristen mit ihren Mistgabeln?
Das Konzept von htmx gefällt mir, und ich habe heute angefangen, das Buch zu lesen, aber jedes Mal, wenn ich daran denke, dass irgendwann auch native mobile Apps unterstützt werden müssen, zögere ich bei der Nutzung
In dem Fall müsste man wohl nicht nur das Frontend, sondern auch einen beträchtlichen Teil des Backends neu schreiben
hyperview.org kenne ich, aber für die Anwendungsfälle, die mich interessieren, reicht eine React-Native-App nicht aus
Man muss die Domain-Logik nur außerhalb des Controllers platzieren
Ich frage mich, ob jemand mit einem im Service Worker definierten virtuellen Server und dem HTML/HTMX-Request-Response-Modell Offline-Apps baut
Ich mag htmx, konnte es aber in Situationen, in denen auch Offline-Betrieb nötig war, nicht verwenden
Wenn sich Server-Code unverändert im Worker ausführen ließe, wäre das ein großartiger Hack
Theoretisch sollte jede selbst hostbare Server-Architektur möglich sein
Das Ziel ist eine einzelne Binärdatei ohne Abhängigkeiten von externen Diensten, und ich verwende Go
Komponenten wie ein sich selbst aktualisierender lokaler Dienst oder eine replizierte Datenbank sind bereits weitgehend vorhanden, und Cross-Compilation für verschiedene Betriebssysteme und Architekturen ist ebenfalls einfach
Als Alternative dazu, alles in den Browser zu packen, erscheint dieser Ansatz ziemlich sinnvoll, sofern man davon ausgehen kann, einen separaten Prozess ausführen zu dürfen
Ich wünschte nur, Go hätte auch so eine Rechteverwaltung wie Deno
Für meine privaten Apps verwende ich durchgehend dieses Muster, nur mit einer kleinen htmx-ähnlichen Bibliothek, die ich selbst gebaut habe
Auf HTMX umzustellen, dürfte auch nicht besonders schwer sein
Ich frage mich, ob es eine gute Idee wäre, HATEOAS in Desktop- oder Mobile-Apps zu übertragen; als Experiment wäre das interessant
Es funktioniert, ist aber nicht so flexibel wie im Web, und jeder verlinkbare Screen muss strikt als Black Box entwickelt werden
Der Versuch an sich war spannend, aber ich bin mir nicht sicher, wie viel Wert das in der Produktion hat
Ich war froh, dass REST die SOAP-Monster vereinfacht hat, aber es brachte auch eine beträchtliche Portion Dogmatismus mit sich
Ich verstehe das grundlegende Ziel von REST, weil es Konzepte, Daten und Service-Architektur an das anpasst, was für Nutzer natürlich ist
Aber HATEOAS wirkt eher wie das Ergebnis des Wunsches nach noch mehr Dogmatismus und Angeberei in Architektur-Meetings, statt sich darauf zu konzentrieren, ob das Modell die User Experience tatsächlich verbessert
Ich frage mich, ob es ein UI-Beispiel gibt, das zeigt, warum HATEOAS ein grundlegendes Prinzip sein sollte
Im Grunde hat jede Seite Links dazu, „was als Nächstes zu tun ist“, und HATEOAS wirkt wie eine schillernde Art, ein solches Zustandsmodell in REST-Service-Aufrufe zu übertragen