Micro Frontends

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Eines Tages, vor nicht allzu langer Zeit, hörte ich immer wieder Witze über „Micro Frontends“ – so ähnlich, wie ich zuerst von Toast erfahren habe. Ich verstand die Quelle erst nicht, bis ich nachfragte und dabei diesen Artikel von Cam Jackson entdeckte.

In diesem Artikel werden wir einen aktuellen Trend beschreiben, Frontend-Monolithen in viele kleinere, besser zu handhabende Teile zu zerlegen, und wie diese Architektur die Effektivität und Effizienz von Teams, die an Frontend-Code arbeiten, steigern kann.

Ich würde argumentieren, dass es „Frontend-Monolithen“ und „Frontend-Code“ heißen sollte, aber ich schweife schon ab.

Die Idee ist ähnlich wie bei Microservices, aber für das Frontend. Anstatt einer einzigen großen Frontend-Architektur (z. B. einer React-App) werden verschiedene Teile des Frontends völlig unabhängig voneinander entwickelt, haben keine Abhängigkeiten voneinander und können unabhängig bearbeitet und bereitgestellt werden.

Es ist eines dieser Dinge, bei denen man nicht genau sagen kann, ob es sich wirklich um eine interessante Vorahnung der Zukunft handelt, nur um eine Nischenarchitektur-Wahl, die für eine Handvoll großer Organisationen funktionierte, oder sogar nur um eine theoretische Option.

Zuerst denke ich an Konsistenz und DRY-ness. Wo immer ich gearbeitet habe, waren diese Dinge wichtig, und es scheint, dass die Branche insgesamt endlose Frontend-Probleme damit hatte, Designs zu liefern, die konsistent und kohärent bleiben, ohne sich mit Bergen von technischer Schuld zu wiederholen. Unabhängige Frontends scheinen ein Problem zu sein, wenn Team B von Team A blockiert wird, weil etwas nicht direkt damit zusammenhängt, aber dann entsteht das Problem, dass die Ergebnisse von Team B von der Konsistenz mit den Ergebnissen von Team A abweichen.

Der Artikel selbst spricht von einer Browse/Search-Landingpage, einer Detail-/Bestellseite und einer Profilseite, wobei alle drei von verschiedenen unabhängigen Produkten/Teams bearbeitet werden. Das klingt für mich irgendwie cool und interessant, und es klingt auch, als ob diese Teams bei der Arbeit besser nebeneinander sitzen sollten; sonst geht die App in zwei Wochen in Richtung Frankensteins Monster. Das Styling wird nur leicht mit einer „Ich weiß nicht, mach einfach einen guten Job“-Mentalität behandelt. Teams haben damit Probleme, wenn sie alle am selben Produkt arbeiten, daher hätte ich hier erhebliche Bedenken. Das Erste, was ich versuchen würde zu lösen, wenn dies ernsthaft diskutiert wird, wäre ein Designsystem, das alles überspannt und das jeder ohne Ausnahme nutzt.

Und was, wenn diese Micro Frontends auf derselben Seite koexistieren? Benutze <iframe>, sagt der Artikel. Ich kann mir keine Welt vorstellen, in der das zu einer guten Benutzererfahrung führt. (iFrames sind langsam, besonders wenn viele von ihnen ihre eigenen Welten starten – und was ist mit Elementen, die Grenzen überschreiten könnten, wie Tooltips und Menüs?)

Die anderen Integrationsoptionen… sie in eigene Bundles oder sogar native Webkomponenten zu isolieren, klingt etwas besser. Aber immer noch, die Idee der siloartigen Entwicklung, bei der eine React-Komponente auf derselben Seite wie eine Vue-Komponente platziert wird, scheint eine enorme Benutzerstrafe für ein ziemlich spezifisches organisatorisches Problem zu sein. Ganz zu schweigen davon, dass Sie die Vorteile eines gemeinsamen Verständnisses einer Codebasis und die Vorteile eines tieferen technischen Verständnisses einer kleineren Auswahl an Werkzeugen verlieren.

Ich charakterisiere das wahrscheinlich nicht fair, besonders weil die Idee für mich ziemlich neu ist und ich noch nie so gearbeitet habe.

Nader Dabit hat einen Folgeartikel: Building Micro Frontends with React, Vue, and Single-spa. Nur damit ich das nicht falsch darstelle: Die Idee ist wirklich, dass du vielleicht eine React-App baust und ich baue eine Vue-App und wir hauen sie auf dieselbe Seite. Ich komme definitiv aus einer Ära, in der wir lachten-dann-zuckten, als wir Seiten fanden, die mehrere Versionen von jQuery auf derselben Seite verwendeten, plus etwas, das MooTools und Prototype scheinbar versehentlich lud. Wir zuckten, weil das ein Eimer voller JavaScript war, meist unnötigerweise dupliziert, was Fehler verursachte und die Seite verlangsamte. Das scheint nicht viel anders zu sein.

Joel Denning weist in einem AMA zum Thema darauf hin

Ich weise darauf hin, dass wir uns in der Phase des „Hassens, ohne genau zu prüfen“ dieser Idee befinden. Es ist durchaus möglich, dass die Idee nach einer legitimen, genauen Prüfung immer noch scheitert. Aber es ist noch zu früh, um das zu sagen.

Einverstanden.

Entschuldigung für das Anhäufen. 😣