- Eine deklarative Sprache zur Erweiterung der HTML-Syntax, mit der sich dynamische und reaktive Weboberflächen erstellen lassen, und die bestehenden HTML-Nutzern eine vertraute Entwicklungsumgebung bietet
- Streaming-Rendering ermöglicht es, Inhalte sofort vom Server zu senden, sodass die Oberfläche bereits angezeigt werden kann, bevor das JavaScript-Bundle des Clients geladen ist
- Feingranulares Bundling (fine-grained bundling) minimiert die Übertragung unnötigen Codes und verbessert so Performance und Ladegeschwindigkeit
- Gezielte Kompilierung je Zielumgebung (targeted compilation) erzeugt effiziente Ausgaben, die jeweils für Browser und Server optimiert sind
- Integrierte TypeScript-Unterstützung und umfangreiche Editor-Funktionen steigern Entwicklerproduktivität und Codequalität
Überblick über Marko
- Marko ist eine deklarative Sprache, die HTML neu denkt, mit dem Ziel, dynamische und reaktive Benutzeroberflächen zu erstellen
- Der Großteil von gültigem HTML kann in Marko unverändert verwendet werden
- Durch die Erweiterung der HTML-Syntax lassen sich moderne Anwendungen deklarativ schreiben
- Wird bereits im produktiven Betrieb auf Websites mit hohem Datenverkehr wie eBay.com eingesetzt
- Wer HTML, CSS und JavaScript beherrscht, kann ohne zusätzliche Lernkurve direkt loslegen
Hauptmerkmale
- Streaming-Rendering ermöglicht es dem Server, fertige Inhalte sofort zu übertragen
- Die erste Ansicht kann bereits angezeigt werden, bevor das clientseitige JavaScript-Bundle geladen ist
- HTML, Bilder und Assets werden asynchron geladen und sorgen für ein schnelles erstes Rendering
- Feingranulares Bundling (Fine-Grained Bundling) überträgt nur den tatsächlich benötigten Code
- Ungenutzter Code wird entfernt, und unnötige Hydration wird bis auf Ebene von Untertemplates ausgelassen
- Entworfen nach der Philosophie „Lean by default, Fast by design“
- Gezielte Kompilierung je Zielumgebung (Targeted Compilation) wird unterstützt
- Unter Berücksichtigung der Unterschiede zwischen Browser und Server werden für jede Umgebung optimierte Ausgaben erzeugt
- Schnellere Ladezeiten, kleinere Bundles und Umsetzung in einer einzigen einheitlichen Sprache
Codebeispiele und Syntax
Performance und Skalierbarkeit
- Schnelleres Initial Rendering (Faster First Paint) verbessert die Benutzererfahrung
- Skalierbar: flexibel erweiterbar von einfachen HTML-Templates bis zu komplexen Komponentenstrukturen
- Kleine Runtime und optimierter Compiler sorgen auch in unterschiedlichen Netzwerkumgebungen für hohe Leistung
TypeScript- und Entwicklerwerkzeug-Integration
- Eingebaute TypeScript-Unterstützung bietet starke Typinferenz
- Bewahrt Typkonsistenz zwischen Templates und Komponenten
- Unterstützt im Editor Funktionen wie Autovervollständigung, Gehe zu Definition, Syntaxhervorhebung und Formatierung
- Frühe Fehlererkennung und verbesserte Codequalität schaffen eine stabile Entwicklungsumgebung
Fazit
- Marko ist eine moderne Sprache für die Webentwicklung, die HTML-nahe Syntax, High-Performance-Rendering, präzises Bundling und TypeScript-Integration kombiniert
- Sie arbeitet effizient sowohl auf dem Server als auch im Client und bietet Skalierbarkeit und Performance für den Betrieb großer Services
2 Kommentare
Bis jetzt wohl eher Svelte.
Hacker-News-Kommentare
Ich hoffe, dass HTML selbst künftig auch ohne JavaScript alle HTTP-Verben (PUT, DELETE usw.) unterstützt, Eingabesteuerelemente wie Dropdowns, Mehrfachauswahl, Datum und Uhrzeit nativ bereitstellt und Formulare ohne vollständigen Seiten-Reload absenden kann.
Als ich den Namen htmx zum ersten Mal hörte, hatte ich genau so etwas erwartet, aber in der Praxis war es eher auf dem Niveau von intercooler.
Für solche Funktionen braucht es breite Unterstützung durch die Browserhersteller.
Mehr dazu gibt es im Triptych-Projekt.
Aus der Perspektive von jemandem, der selbst ein JavaScript-Framework gebaut hat, finde ich, dass Marko unterschätzt wird.
Die Optimierungen zur Compile-Zeit sind äußerst beeindruckend, und auch die Doku zur feingranularen Bündelung ist hervorragend.
Tatsächlich hat es auch im Vergleich der Kanban-Board-Performance gut abgeschnitten.
React hat sich mit der Kopplung an Next.js vom Wesen der Plattform entfernt, und inzwischen gibt es kaum noch Gründe, es zu wählen.
Die Zeiten, in denen statisch hydratisiertes React auf einem CDN lief, waren deutlich besser.
Trotzdem denke ich, dass ich mir Marko ebenfalls ansehen sollte.
Es wäre auch schön, wenn es für Desktop-Frameworks wie Electron solche tiefgehenden Analysen gäbe.
Ich mag React vor allem deshalb, weil es einfach „nur JavaScript“ ist.
Syntax wie
<let>oder<for>gefällt mir nicht.Man ist nur so daran gewöhnt, dass man das leicht vergisst, wenn man sich neue Frameworks ansieht.
Formen wie
{% for user in users %}oder{#each users as user}sind viel klarer.Auch JSX ist nicht perfekt — die Schreibweise
{users.map(...)}ist nach wie vor umständlich.Das ist auch ein Grund, warum Vue und Svelte beliebt sind.
Übrigens kann man Vue, wenn man möchte, auch ausschließlich mit JSX schreiben.
Das DSL ist immer weiter aufgebläht worden, und mit Hooks wie useFormStatus oder useActionState ist es komplexer geworden.
Im Gegensatz dazu wirkt die Syntax von Marko intuitiv; Funktionen sehen wie Funktionen aus, Variablen wie Variablen, was das Verständnis erleichtert.
Der Ansatz, JS in HTML einzubetten, wirkt ziemlich frisch.
Ryan Carniato war an diesem Projekt beteiligt und leitete später SolidJS; ich frage mich, warum er dann wieder zum Stil HTML-in-JS zurückgekehrt ist.
Beide Projekte haben sich entwickelt, indem sie Ideen voneinander übernahmen, und stehen bis heute im Austausch.
Viele Entwickler sind damit vertraut, und der Editor- sowie TypeScript-Support ist bereits sehr gut.
Nach über 20 Jahren hat man das Gefühl, dass sich das Frontend im Kreis gedreht hat und am Ende wieder beim Paradigma der JSP-Zeit gelandet ist.
Damals wurde es als „uncool“ abgetan, aber am Ende war es vielleicht doch der richtige Weg.
Manche Dinge verschwinden, doch die Kreativität der nächsten Generation bringt wieder Neues hervor.
Bei großer Skalierung musste man allerdings vorsichtig sein.
Je nach Situation kann ein anderer Ansatz besser geeignet sein.
Damals brauchte man mobile Apps und API-zentrierte Architekturen, und SPA passte gut zu diesen Anforderungen.
Heute geht es nicht um eine Rückkehr zu JSP, sondern darum, ein Gleichgewicht zwischen beiden Seiten zu finden.
Marko ist bereits bei eBay erprobte Technologie.
Ich habe es über Jahre verwendet, ohne je auf Probleme zu stoßen.
Im Gegensatz dazu sind React-basierte Produkte wie Facebook, Instagram und Messenger ständig von UI-Bugs betroffen.
Betrachtet man die Ergebnisse in echten großen Diensten, sticht die Stabilität von Marko hervor.
Marko war schon mehrfach auf HN Thema.
Es gab bereits Threads dazu im Januar 2023, August 2017 und Februar 2015.
Die Syntax wirkt wie eine deutliche Verbesserung gegenüber JSX.
Besonders die knappe Syntax im Pug-Stil gefällt mir, deshalb frage ich mich, warum sie so tief in der Dokumentation versteckt ist.
Dokumentation zur Concise Syntax
Aber die Fehler beim Syntax-Highlighting und die Art, wie Attribute getrennt werden, haben mir nicht gefallen.
In letzter Zeit nutze ich meist Svelte, warte aber immer noch auf eine elegantere Syntax.
Whitespace-basierte Syntax ist in Ordnung, aber Notationen wie
--oder die Schwierigkeit beim Parsen sind enttäuschend.Das Marko-Team hat eigens einen Hacker-News-Klon gebaut und veröffentlicht, um Marko 6 vorzustellen.
GitHub-Beispiel ansehen
Für eine Sprache, die offenbar für Demos gebaut wurde, ist es schon etwas komisch, dass Gradient-Text wie „HTML-based“ oder „building web apps“ nicht sichtbar ist.