Jamstack: Ein weiteres Buzzword oder die Zukunft der Webentwicklung?
Serge KorzhLesezeit: 6 Minuten
Die sich ständig verändernde Welt der Webentwicklung bringt ständig neue Begriffe, Konzepte und Technologietrends hervor. Aktuell ist der Begriff Jamstack absolut im Trend. Aber was genau ist Jamstack? Finden wir es heraus.
Brauchen wir einen weiteren Begriff wie „Jamstack“?
Zunächst einmal: Was genau ist Jamstack eigentlich? Es handelt sich weder um ein neues JS-Framework noch um einen Technologie-Stack, wie der Name vielleicht vermuten lässt. Vielmehr wurde der Begriff von dem Cloud-Computing-Anbieter Netlify im Jahr 2015 geprägt; sie wollten einen Namen für den Paradigmenwechsel in der Webentwicklung haben. Ursprünglich wurde der Begriff „JAM-Stack“ verwendet, wobei JAM für JavaScript, APIs und Markup stand und sich von den beliebten AMP-Stacks (Apache, MySQL, PHP), der MEAN-Stacks und anderen abgrenzte.
Im Laufe der Jahre hat sich das Konzept von seinem ursprünglichen Akronym entfernt und heute verstand man mehr darunter als nur einen weiteren Technologie-Stack. Die offizielle Website beschreibt Jamstack als „einen architektonischen Ansatz, der die Weberfahrung von Daten und Geschäftslogik entkoppelt“. Beachten Sie das Wort „entkoppeln“. Jamstack ist eng mit der Microservices-Architektur verwandt, wobei sich Jamstack auf den Arbeitsablauf von Webentwicklern und den Lebenszyklus von Websites konzentriert. Jamstack ist also nicht nur eine Architektur, sondern ein Ansatz zur Erstellung und Bereitstellung von Websites. Wie genau sieht eine Jamstack-Website also aus?
Die Microservice-Architektur ist ein Schlüsselelement von Jamstack
Markup ist vorgerendert und mit Inhalt gefüllt
Anstatt sich um Serverbetriebszeit, Caching, Cache-Ungültigkeit, Bereitstellung und Skalierung, Sicherheit und all die anderen Probleme zu kümmern, die mit der Verarbeitung von Anfragen durch einen Webserver einhergehen, wird bei einer Jamstack-Website das Markup (HTML) der Website zum Zeitpunkt der Erstellung mit einem Static-Site-Generator vorgerendert und als statische Assets in einem Content Delivery Network (CDN) bereitgestellt.
Automatisierte Erstellung und Bereitstellung
Vielleicht denken Sie sich: „Moment mal, Jamstack ist also nur eine schicke Bezeichnung für statische Websites? Ich dachte, die sind ein Relikt der Vergangenheit!" Doch hier kommt der größte Vorteil von Jamstack ins Spiel: die Automatisierung. Natürlich ist es nicht möglich, den HTML-Code einer Seite automatisiert bearbeiten zu lassen, um ein Logo zu ersetzen oder Produkteigenschaften zu aktualisieren. Aber jedes Mal, wenn ein Teil des Website-Inhalts aktualisiert wird (z. B. bei Verwendung eines Headless CMS wie Strapi), wird ein Webhook ausgelöst, sodass das aktualisierte Markup in einem einzigen atomaren, unveränderlichen Deployment in das CDN übertragen wird.
Git-basierter Arbeitsablauf und Konfiguration als Code
Dies mag wie eine offensichtliche Best Practice für jedes Softwareentwicklungsprojekt klingen, aber bei Jamstack ist es ein Muss, alle Quell- und Konfigurationsdateien in einem Git-Repository anzulegen. Dies ermöglicht die bereits erwähnte optimierte Automatisierung von CI/CD. Die meisten CI/CD-Werkzeuge sind auf den Git-basierten Workflow ausgerichtet und funktionieren mit anderen Versionskontrollsystemen nicht.
Nutzung von APIs für dynamische Inhalte
Während ein Großteil der Inhaltsvorbereitung erstaunlich weit gehen kann, kann das clientseitige Rendering für die Teile Ihrer Seiten verwendet werden, die hochdynamische oder personalisierte Inhalte erfordern. Dies erfolgt in der Regel, indem ein bestimmter Teil Ihrer Geschäftslogik in eine separate API verpackt wird. Hierbei kann es sich um einen benutzerdefinierten Microservice, eine Headless eCommerce-Plattform wie Shopware, eine serverlose Funktion oder eine 3rd-Party-API einer SaaS-Lösung handeln.
„Jamstack ist ein architektonischer Ansatz, der die Weberfahrung von den Daten und der Geschäftslogik entkoppelt und so die Flexibilität, Skalierbarkeit, Leistung und Wartbarkeit verbessert.“
Sollte ich Jamstack für meine Website verwenden?
Die einzelnen Komponenten von Jamstack haben wir nun besprochen. Wir wissen jetzt, dass eine Jamstack-Website nicht nur eine statische Website ist, sondern durch häufige Build- und Deploy-Zyklen und clientseitige API-Aufrufe sehr dynamisch sein kann. Der Jamstack-Ansatz kann kombiniert werden mit anderen Webentwicklungsmustern wie der PWA und der SPA.
Das ist alles schön und gut, aber warum sollten Sie Jamstack für Ihr nächstes Projekt in Betracht ziehen? Lohnt es sich sogar, Ihre bestehende Website auf Jamstack zu migrieren? Schauen wir uns die wichtigsten Vorteile an.
Leistung
Wenn Ihre Website vollständig über ein CDN läuft, bekommt der Benutzer die Seite von einem lokalen CDN-Knoten schneller aufgerufen als jede Serverinfrastruktur dies je könnte. Das bedeutet eine bessere UX, eine bessere SEO-Zugänglichkeit sowie geringere Hosting-Kosten.
Aber was ist mit dem Seitenaufbau? Was ist, wenn Sie Millionen von Seiten haben und die Inhalte ständig aktualisieren, würde das nicht einen enormen Aufwand verursachen? In der Tat war dies früher ein Problem mit älteren statischen Website-Generatoren, aber heute sind sie viel intelligenter bei der Optimierung des Seitenaufbaus, und Frameworks wie Next.js bieten jetzt eine Inkrementelle statische Regeneration wodurch die Möglichkeit besteht, neue oder aktualisierte Seiten nach dem Seitenaufbau zu generieren. Mit einer genaueren Kontrolle darüber, welche Inhalte wann und unter welchen Bedingungen aktualisiert werden, können Sie mit solchen Tools jeden einzelnen Inhalt Ihrer Website optimieren, um die bestmögliche Aktualisierungsstrategie zu erzielen.
Skalierbarkeit
Sie müssen sich keine Sorgen über plötzliche Trafficspitzen machen, da der Großteil Ihrer Website von Natur aus skalierbar ist! Die Skalierung ist im Wesentlichen auf ein paar selbstverwaltete API-Dienste lokalisiert, falls Sie diese haben. Und Sie müssen nicht alles auf einmal skalieren – eine API, die für eine hochbelastete Funktion verantwortlich ist, kann unabhängig von allen anderen skaliert werden.
Sicherheit
Wenn Sie Jamstack verwenden, werden die Schritte des Seitenrenderings und der Seitenbereitstellung getrennt und nutzen nicht dieselbe Umgebung. Serverseitige Aufgaben wie Datenbankabfragen werden während des Erstellungsschritts durchgeführt, sobald die Seiten gerendert werden. So sind viele Arten von Angriffen (z. B. SQL-Injection, RCE) nicht möglich, weil die Build-Umgebung (in der solche Schwachstellen existieren könnten) nicht öffentlich zugänglich ist. Die Angriffsvektoren beschränken sich auf spezielle APIs, die dem Client zur Verfügung stehen. Wenn eine davon kompromittiert wird, ist nicht unbedingt die gesamte Website gefährdet. Wenn jedoch ein Teil des Stacks einer monolithischen Anwendung kompromittiert wird, ist oft die gesamte Anwendung gefährdet.
Wartbarkeit
Genau wie bei Microservices ist eine Jamstack-Website auf lange Sicht viel einfacher zu warten. Ja, die Entwicklung und Integration mehrerer eigenständiger Dienste ist mit zusätzlichem Aufwand verbunden und erhöht die Komplexität der anfänglichen Projektkonfiguration. Aber eine Website hat (hoffentlich) eine Lebensdauer von mehreren Jahren, und die Aktualisierung oder Änderung von Teilen ist ein wichtiger Bestandteil ihres Lebenszyklus.
Bei einer monolithischen Anwendung ist die Migration von einem Altsystem zu einem neueren System ein langwieriger und riskanter Prozess. Ein Jamstack-Frontend kann allerdings völlig getrennt vom Rest der auf Ihrer Website verwendeten Dienste umgeschrieben werden, und die Dienste selbst können unabhängig voneinander ersetzt werden, je nach Ihren sich ändernden Bedürfnissen. Das bedeutet, dass es keine Alles-oder-nichts-Situation gibt, in der Sie sich auf eine einzige Plattform oder einen einzigen Dienstleister festlegen müssen.
Verlässlichkeit
Es ist immer besser, Fehler so früh wie möglich zu erkennen. Da der Seitenaufbau in Ihrer eigenen, kontrollierten, privaten Umgebung stattfindet, können Sie immer sicher sein, dass Ihre Website Ihren Usern keinen „500 Internal Server Error“ anzeigt, nur weil der Webserver einen Datenbankfehler in einem Teil Ihrer Anwendung nicht erwartet hat.
Außerdem können Sie damit umgehen, dass einige Dienste nicht verfügbar oder defekt sind und dann die gesamte Website nicht mehr funktioniert. Angenommen, Sie haben Benutzerbewertungen, die von einem benutzerdefinierten Dienst verwaltet werden, und dessen Server fällt plötzlich aus. Das ist nicht weiter schlimm, denn der Rest der Website funktioniert trotzdem, auch während Sie das Problem beheben!
Der 500 Internal Server Error ist ein beliebtes „Feature“ von serverseitig gerenderten Websites. Quelle: Symfony Docs.
Wenn Jamstack keine gute Option für Sie ist
Die Vorteile von Jamstack scheinen groß zu sein. Aber Jamstack ist sicher nicht für alle Anwendungsfälle geeignet, oder? Schauen wir uns einige Szenarien an, in denen Sie sich für eine andere Lösung entscheiden könnten.
Interne Anwendung / keine öffentlich zugänglichen Inhalte
Sie entwickeln ein internes Tool oder eine Webanwendung für eine geschlossene Benutzergruppe. Der Datenverkehr ist lokalisiert und besser vorhersehbar, die App ist vollständig interaktiv, und Sie möchten sie auf einem internen Server hosten, um sie selbst zu verwalten. Es besteht also keine Notwendigkeit, vorgerenderte Seiten von einem CDN liefern zu lassen.
Sie können sich jedoch auch für ein Framework wie Next.js entscheiden, das ein hybrides statisches und serverseitiges Rendering ermöglicht, falls Sie Ihre Anwendung optimieren oder erweitern möchten, und die anderen oben erwähnten Jamstack-Praktiken nutzen.
Beschränkungen auf bestimmte Technologien
Wenn Sie auf die Verwendung bestimmter Technologien, Dienstanbieter oder Hostings beschränkt sind, haben Sie vielleicht einfach nicht den Zugang zu den richtigen Tools, um Jamstack zu verwenden. Trotzdem müssen Sie nicht unbedingt ein modernes JavaScript-Framework wie Nuxt oder Gatsby verwenden, um eine Jamstack-Website zu erstellen. Sie können auch ein Jamstack-freundliches Web-Framework finden, geschrieben in fast jeder Sprache. Beispiele sind Hugo (Go), Jigsaw (PHP), und Statiq (.NET Core).
Keine Probleme mit der bestehenden Lösung
Nehmen wir an, Sie haben eine WordPress-Website, und es gilt Folgendes:
- die Standardfunktionen und einige Plugins bieten genau die Funktionen, die Sie brauchen (tun sie das?);
- Sie haben keinen Bedarf für eine Skalierung der Website (sind Sie sicher?);
- es macht Ihnen nichts aus, WordPress und alle Plugins selbst auf dem neuesten Stand zu halten (oder etwa doch?),
- Sie haben ein großartiges Team von WordPress-Spezialisten.
Kurz gesagt, Sie sind sehr zufrieden damit, wie die Dinge laufen, und das ist großartig. Dennoch können Sie Jamstack für ein oder zwei Seiten Ihrer Website ausprobieren, indem Sie WordPress als Headless CMS verwenden und den Rest auf den Server verlagern. Oder Sie verwenden eine der WordPress-zu-Static-Tools wie Shifter, die das Beste aus beiden Welten bieten, ohne dass eine kostspielige Migration erforderlich ist.
Fazit
Im Großen und Ganzen ist Jamstack kein revolutionäres Konzept, sondern eher ein neuer Name für eine Kombination bewährter Verfahren, die gut zusammenpassen. Microservices anstelle eines Monolithen, mehr Arbeit zum Zeitpunkt der Erstellung als zur Laufzeit, Git-basierte Arbeitsabläufe und CI/CD-Automatisierung – das sind bekannte Muster in der Softwareentwicklung.
Ihr spezieller Fall erfordert vielleicht keinen typischen Jamstack-Technologie-“Stack“, aber das hindert Sie nicht daran, den Jamstack-Ansatz bei der Entwicklung Ihrer DevOps-Prozesse und Anwendungsarchitektur anzuwenden. Jamstack hat sich zwar noch nicht zum neuen Standard entwickelt, und es ist auch nicht sicher, ob dies der Fall sein wird, aber der allgemeine Trend ist ungebrochen: Die Komplexität von Webanwendungen wird dort entfernt, wo sie nicht benötigt wird. Der Trend geht Hand in Hand mit dem Konzept der Green UX, der in Alicjas Blogbeitrag diskutiert wird.
Ich hoffe, dieser Artikel hat Ihnen geholfen, das Konzept hinter Jamstack besser zu verstehen und konnte Ihnen näherbringen, warum Sie es in Ihren zukünftigen (und aktuellen) Webentwicklungsprojekten einsetzen sollten.