{"id":23945,"date":"2023-02-05T22:55:36","date_gmt":"2023-02-05T21:55:36","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=23945"},"modified":"2023-06-18T17:20:57","modified_gmt":"2023-06-18T15:20:57","slug":"jamstack-und-astro-vor-und-nachteile-einer-serverless-architektur","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/02\/05\/jamstack-und-astro-vor-und-nachteile-einer-serverless-architektur\/","title":{"rendered":"JAMStack und Astro:  Vor- und Nachteile einer serverless Architektur"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Einleitung<\/strong><\/h2>\n\n\n\n<p>Seit den fr\u00fchen Tagen der Web-Entwicklung hat die Performance von Websites eine wichtige Rolle gespielt. W\u00e4hrend sich das Internet im Laufe der Jahre weiterentwickelt hat, haben sich auch die Anforderungen an die Performance von Websites erh\u00f6ht. Benutzer erwarten eine schnelle und reibungslose Nutzererfahrung, unabh\u00e4ngig von der Gr\u00f6\u00dfe ihres Ger\u00e4ts oder ihrer Internetverbindung. Eine schlechte Performance kann sich negativ auf das Nutzererlebnis auswirken und zu einer geringeren Zufriedenheit f\u00fchren, was m\u00f6glicherweise zu einem Verlust von Traffic und Umsatz f\u00fchrt. Daher ist es wichtiger denn je, dass Webentwickler die Performance ihrer Websites im Auge behalten und Ma\u00dfnahmen ergreifen, um sicherzustellen, dass sie schnell und effizient laufen.<\/p>\n\n\n\n<p>Einer der wichtigsten Faktoren bei der Optimierung der Webperformance ist die Wahl des richtigen Web Development Stacks. Beliebte Optionen wie MEAN, MERN oder LAMP bieten eine Vielzahl von Tools und Technologien, die es Entwicklern erm\u00f6glichen, schnelle und effiziente Websites zu erstellen. Die Wahl des richtigen Stacks h\u00e4ngt jedoch von den Anforderungen des Projekts und den F\u00e4higkeiten des Entwicklers ab. Ein zunehmend beliebter Entwicklungs-Stack, der jedoch bereits aus den Urspr\u00fcngen des Web-Developments stammt ist der sogenannte \u201cJam-Stack\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Was ist der JAMStack?<\/strong><\/h2>\n\n\n\n<p>Der JAM-Stack (<strong>J<\/strong>avaScript, <strong>A<\/strong>PIs, <strong>M<\/strong>arkup) ist fundamental gesehen eine Philosophie, eine Denkweise oder eine Vorgehensweise. Im Vergleich zu traditionellen Web-Entwicklungs-Stacks, wie zum Beispiel dem MEAN- oder MERN-Stack (<strong>M<\/strong>ongoDB, <strong>E<\/strong>xpress, <strong>A<\/strong>ngular\/<strong>R<\/strong>eact, <strong>N<\/strong>ode), oder dem LAMP-Stack (<strong>L<\/strong>inux, <strong>A<\/strong>pache, <strong>M<\/strong>ySQL, <strong>P<\/strong>HP) schreibt der JAM-Stack keine spezifischen Technologien vor. Stattdessen greift es auf die Grundlagen von Web-Entwicklung zur\u00fcck: Vorgefertigte HTML-Dokumente und das Hosten dieses HTMLs auf eine Weise, die nicht ein gro\u00dfes Investment in eine umfangreiche Infrastruktur voraussetzt. In den meisten F\u00e4llen bedeutet letzteres, dass ein CDN f\u00fcr das Hosten der Webseiten verantwortlich ist.<\/p>\n\n\n\n<p>Diese neue Art auf Web-Entwicklung zu blicken f\u00fchrt uns zu einem Paradigma, das den Anf\u00e4ngen der Web-Entwicklung sehr \u00e4hnlich sieht.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.39.55.png\"><img loading=\"lazy\" decoding=\"async\" width=\"599\" height=\"220\" data-attachment-id=\"23946\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/02\/05\/jamstack-und-astro-vor-und-nachteile-einer-serverless-architektur\/screenshot-2023-02-05-at-22-39-55\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.39.55.png\" data-orig-size=\"599,220\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot-2023-02-05-at-22.39.55\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.39.55.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.39.55.png\" alt=\"\" class=\"wp-image-23946\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.39.55.png 599w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.39.55-300x110.png 300w\" sizes=\"auto, (max-width: 599px) 100vw, 599px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 1: Render-Prozess in traditionellen Web-Stacks<\/figcaption><\/figure>\n\n\n\n<p>Die obige Abbildung stellt den Prozess dar, welcher bei genannten traditionellen Ans\u00e4tzen (sei es der MEAN-\/MERN-Stack oder der LAMP-Stack) durchlaufen wird, wenn eine Ressource (beispielsweise eine Seite) angefragt wird. Zun\u00e4chst wird wird die Seite vom Client beim Server angefragt. Diese Seiten liegen jedoch nicht in fertiger Form auf dem Server bereit, sondern m\u00fcssen erst noch dynamisch generiert werden. Diese Aufgabe \u00fcbernimmt dabei irgend eine Engine. Vielleicht m\u00fcssen hierf\u00fcr auch noch Datenbank-Aufrufe get\u00e4tigt werden oder mit einem externen System kommuniziert werden. Dann werden die generierten Inhalte in eine Vorlage eingef\u00fcgt und der daraus entstehende HTML-Code wird an den Client zur\u00fcckgesendet. Weiterhin sind mehrere Caching-Schichten in diesem Prozess involviert, bevor die Inhalte schlussendlich den user erreichen.<br>Dieser komplette Prozess kann einige Zeit in Anspruch nehmen. Je nach Komplexit\u00e4t der Seite kann dieser Prozess zwischen ein paar Millisekunden bis hin zu mehreren Sekunden dauern.&nbsp;<\/p>\n\n\n\n<p>Die wichtige Erkenntnis, die daraus entsteht ist, dass die fertige Seite, die der Client am Ende empf\u00e4ngt nie in irgendeiner statischen Form existiert, aus welchem Grund das dynamische Zusammenstellen und das Hosten der Webseite eng miteinander verzahnt sind.&nbsp;<\/p>\n\n\n\n<p>Mit dem JAM-Stack sieht der Prozess anders aus. Zu dem Zeitpunkt, an dem eine Seite angefragt wird, existiert der fertige HTML Code bereits auf dem Server, beziehungsweise auf einem Knotenpunkt des CDNs. So kann die Seite sofort an den Client zur\u00fcckgeschickt werden, sobald die Anfrage eintrifft. Das einzige, was zeitlich gesehen zwischen der Anfrage und der Antwort des CDNs steht, ist die Netzwerkqualit\u00e4t des Nutzers und die Distanz zum n\u00e4chstgelegenen Knoten des CDNs.\u00a0<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.40.10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"388\" height=\"396\" data-attachment-id=\"23947\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/02\/05\/jamstack-und-astro-vor-und-nachteile-einer-serverless-architektur\/screenshot-2023-02-05-at-22-40-10\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.40.10.png\" data-orig-size=\"388,396\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot-2023-02-05-at-22.40.10\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.40.10.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.40.10.png\" alt=\"\" class=\"wp-image-23947\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.40.10.png 388w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.40.10-294x300.png 294w\" sizes=\"auto, (max-width: 388px) 100vw, 388px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 2: Render-Prozess auf dem JAM-Stack <\/figcaption><\/figure>\n\n\n\n<p>Dies wird dadurch erm\u00f6glicht, dass die Website zu dem Zeitpunkt zusammengestellt und zu fertigen HTML-Code verarbeitet wird, an dem der Entwickler eine neue Version in das Source Control Management (SCM) hochl\u00e4dt, wie es in Abbildung 2 dargelegt wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Vorteile von JAM-Stack<\/strong><\/h2>\n\n\n\n<p>Das im vorherigen Kapitel erl\u00e4uterte Paradigma hat gegen\u00fcber traditionellen Vorgehensweisen eine Vielzahl an Vorteilen:<br><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Skalierbarkeit<\/strong>: Eine JAM-Stack-App ben\u00f6tigt keinen klassischen Server zum Ausf\u00fchren, was zur Folge hat, dass sie einfach und g\u00fcnstig auf CDNs gehostet werden kann. CDNs sind grundlegend skalierbare Einrichtungen, die automatisch die Last, die durch Besucher-Traffic entsteht, auf der ganzen Welt verteilen und schnell und einfach auf wachsenden Bedarf anpassen k\u00f6nnen. Das zusammen mit der Tatsache, dass JAM-Stack-Webseiten sehr lightweight sind in Bezug auf notwendige Ressourcen tr\u00e4gt dazu bei, eine JAM-Stack-Website auf einfache Weise skalierbarer und effizienter zu gestalten.<br><\/li>\n\n\n\n<li><strong>Kosten: <\/strong>Wie im vorherigen Punkt angedeutet, ben\u00f6tigen JAM-Stack-Websites in der Regel weit weniger Ressourcen in Bezug auf Server, Datenbanken und dergleichen. Dies macht selbstverst\u00e4ndlich auch das Hosting g\u00fcnstiger. Das kann nat\u00fcrlich je nach dem wie komplex die jeweilige Seite ist variieren, aber typischerweise ist das der Fall.<br><\/li>\n\n\n\n<li><strong>Sicherheit: <\/strong>Viele der Schwachstellen, denen Websites heutzutage ausgesetzt sind, sind auf Fehler auf der Server-Seite zur\u00fcckzuf\u00fchren. Daher sind JAM-Stack-Webseiten fast immer sicherer als nicht-JAM-Stack-Webseiten. Um es anders auszudr\u00fccken, reduziert JAM-Stack die Angriffsfl\u00e4che einer Website.<br><\/li>\n\n\n\n<li><strong>Performance: <\/strong>Der gr\u00f6\u00dfte und der wohl entscheidendste Vorteil des JAM-Stacks ist, dass durch die Abwesenheit eines Servers, der den Inhalt on-the-fly generiert, die Leistung bei JAM-Stack-Anwendungen erheblich besser sein kann gegen\u00fcber serverlastigen Anwendungen.\u00a0<br><\/li>\n\n\n\n<li><strong>SEO: <\/strong>Da JAM-Stack-Webseiten nur statischen Inhalt enthalten und statischer Inhalt f\u00fcr Suchmaschinen viel einfacher zum Crawlen und Indizieren ist, bieten sie nat\u00fcrlich automatisch einen besseren SEO-Wert. Eine Website, die Inhalte dynamisch rendert, stellt f\u00fcr Indizierer Herausforderungen dar, die eine rein statische Inhaltsseite nicht hat.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Nachteile von JAM-Stack<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Notwendigkeit von Entwicklern: <\/strong>Aufgrund der Art und Weise, wie JAM-Stack funktioniert, muss zwangsl\u00e4ufig immer ein Entwickler bei jeder Aktualisierung des Inhalts beteiligt sein, da dies das Neuerstellen der gesamten Website erfordert. Es ist selbstverst\u00e4ndlich m\u00f6glich, dass Produzierter von Inhalten den Inhalt auf eine nicht-technische Weise bereitstellen, die der Build-Prozess verarbeitet, um schlie\u00dflich statischen HTML-Code zu erzeugen, aber im Endeffekt ist es fast garantiert, dass ein Entwickler am Ende einen Knopf dr\u00fccken muss, was f\u00fcr einige Anwendungsf\u00e4lle einen gro\u00dfen Nachteil darstellt.<br><\/li>\n\n\n\n<li><strong>Update-Frequenz: <\/strong>Aufgrund des vorherigen Punktes, ist der JAM-Stack nicht die beste Wahl, wenn Sie mit einer Website umgehen, die h\u00e4ufig aktualisiert werden muss. Gerade f\u00fcr beispielsweise Webseiten von Nachrichtendiensten ist der JAM-Stack-Ansatz sicherlich kontraproduktiver als traditionellere Vorgehensweisen. In diesen F\u00e4llen sollen Inhaltsproduzenten Inhalte direkt in das System hochladen k\u00f6nnen, ohne dass die komplette Seite neu gebaut werden muss. Hierf\u00fcr w\u00e4re ein serverbasierter Ansatz sinnvoller.<\/li>\n<\/ul>\n\n\n\n<p>Folgend wird das Javascript Framework <em>Astro<\/em> beschrieben, dass das Prinzip von JAM-Stack umsetzt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Astro<\/strong><\/h2>\n\n\n\n<p>Astro ist grundlegend gesehen ein Static Site Generator, mit welchem sich Webseiten bauen lassen. Dabei werden komponentenartige Bausteine erzeugt, die sich zu einer Webpage zusammenstellen lassen. Das Besondere an Astro jedoch ist, dass keinerlei Javascript &#8211; oder zumindest nur ein Minimum &#8211; an den Browser gesendet wird. Au\u00dferdem ist Astro ein Meta-Framework. Man kann so mehrere andere Frameworks gleichzeitig verwenden, sei es React, Vue, Svelte, oder ein anderes etabliertes Framework.<\/p>\n\n\n\n<p>Obwohl Astro es vorsieht, m\u00f6glichst viel auf einem CDN vorzurendern, ist bei dem Gro\u00dfteil der heutigen Webseiten der komplette Verzicht auf JavaScript keine Option. Deswegen gilt es, JavaScript Bundles so sp\u00e4t wie m\u00f6glich zu laden. Jene Teile, mit denen der Benutzer gar nicht interagiert, m\u00fcssen auch nicht geladen werden. In Astro stellen sogenannte \u201cInseln\u201d diese interaktiven Bereiche dar (Island Architecture).<\/p>\n\n\n\n<p>Anhand des folgenden Beispiels soll die Funktionsweise veranschaulicht werden.<\/p>\n\n\n\n<p>In diesem Codebeispiel gibt es drei wichtige Bereiche, die entscheidend f\u00fcr die Funktionalit\u00e4t von Astro sind.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.23.55.png\"><img loading=\"lazy\" decoding=\"async\" width=\"812\" height=\"1024\" data-attachment-id=\"23948\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/02\/05\/jamstack-und-astro-vor-und-nachteile-einer-serverless-architektur\/screenshot-2023-02-05-at-21-23-55\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.23.55.png\" data-orig-size=\"1230,1552\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot-2023-02-05-at-21.23.55\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.23.55-812x1024.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.23.55-812x1024.png\" alt=\"\" class=\"wp-image-23948\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.23.55-812x1024.png 812w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.23.55-238x300.png 238w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.23.55-768x969.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.23.55-1217x1536.png 1217w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.23.55.png 1230w\" sizes=\"auto, (max-width: 812px) 100vw, 812px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 3: Code-Beispiel einer Astro-Komponente<\/figcaption><\/figure>\n\n\n\n<p><strong>Zeilen 1-11: <\/strong>In diesem Bereich, der immer am Anfang einer Astro-Datei bzw. Komponente steht, befindet sich das Frontmatter. Dieses ist ein Javascript-Bereich, der nicht an den Browser \u00fcbermittelt wird und zur Build-Zeit bereits ausgef\u00fchrt wird. Aus diesem Grund ist es auch m\u00f6glich, API-Schl\u00fcssel, oder Datenbank-Credentials in das Frontmatter zu hinterlegen, da es garantiert auf dem CDN bleibt.<br>In diesem Fall werden neben den \u00fcblichen Imports zwei Datei-Leseoperationen durchgef\u00fchrt. Das hat den Vorteil, dass zur Laufzeit die Daten aus den Daten schon fertig verarbeitet wurden und daf\u00fcr keine Ladezeit draufgeht.<\/p>\n\n\n\n<p><strong>Zeilen 13-43:<\/strong> In diesem Beriech steht das eigentliche HTML, das die Webseite beschreibt. Interessante Stellen sind dabei etwa Zeilen 19-23 und Zeilen 32-36, in denen die Daten, die im Frontmatter aus den Dateien gelesen wurde eingesetzt werden. Auch hier wird der fertige HTML-Code bereits zur Build-Zeit generiert &#8211; bevor ein Besucher die Daten auch \u00fcberhaupt abgefragt hat.\u00a0<\/p>\n\n\n\n<p><strong>Zeile 41:<\/strong> Hier kommt die Insel-Architektur von Astro zur Geltung. Die eingebundene Komponente <em>ButtonComponent<\/em> besitzt das Attribut <em>client:visible<\/em>. Um die Funktion dieses Attributs zu erl\u00e4utern, lohnt es sich, auf den Code des jeweiligen Komponenten zu blicken:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.57.01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"390\" data-attachment-id=\"23949\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/02\/05\/jamstack-und-astro-vor-und-nachteile-einer-serverless-architektur\/screenshot-2023-02-05-at-21-57-01\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.57.01.png\" data-orig-size=\"1312,500\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot-2023-02-05-at-21.57.01\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.57.01-1024x390.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.57.01-1024x390.png\" alt=\"\" class=\"wp-image-23949\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.57.01-1024x390.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.57.01-300x114.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.57.01-768x293.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-21.57.01.png 1312w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 4: Code-Beispiel f\u00fcr eine einfache React-Komponente in Astro (Insel)<\/figcaption><\/figure>\n\n\n\n<p>Wie man schnell erkennt, handelt es sich bei dieser React-Komponente um einen sehr simplen, aber dynamischen Bestandteil der Webseite, bei dem client-seitiger JavaScript-Code jedoch essentiell ist. Die Insel-Architektur und das Attribut <em>client:visible<\/em> sieht vor, dass der zu dieser Komponente zugeh\u00f6riger JavaScript erst dann geladen wird, wenn die Komponente sichtbar ist f\u00fcr den Benutzer. Wenn der Benutzer diese Komponente nie sieht, dann wird der JavaScript eben auch nicht geladen, was ebenfalls zu deutlich schnelleren Ladezeiten f\u00fchrt.<\/p>\n\n\n\n<p>Diese Strategie von Astro f\u00fchrt zu einer deutlich erh\u00f6hten Performance, die durch das Pre-Rendering von Webseiten erm\u00f6glicht wird. Eine Analyse der Webseite-Performance auf <em>PageSpeed Insights<\/em> (<a href=\"https:\/\/pagespeed.web.dev\">https:\/\/pagespeed.web.dev<\/a>), das in Abbildung 5 dargestellt wird, belegt dies nochmal.<br>Darin erkennt man nicht nur, dass die Seite innerhalb von 0.3 Sekunden vollst\u00e4ndig geladen wird, sondern auch dass die Zeit vom ersten Contentful Paint bis zum Interactive-Zustand 0.0 Sekunden betr\u00e4gt, also sofort die vollst\u00e4ndige Seite mit allen Inhalten geladen wurde.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.08.11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"977\" height=\"794\" data-attachment-id=\"23950\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/02\/05\/jamstack-und-astro-vor-und-nachteile-einer-serverless-architektur\/screenshot-2023-02-05-at-22-08-11\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.08.11.png\" data-orig-size=\"977,794\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot-2023-02-05-at-22.08.11\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.08.11.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.08.11.png\" alt=\"\" class=\"wp-image-23950\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.08.11.png 977w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.08.11-300x244.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/02\/Screenshot-2023-02-05-at-22.08.11-768x624.png 768w\" sizes=\"auto, (max-width: 977px) 100vw, 977px\" \/><\/a><figcaption class=\"wp-element-caption\">Abbildung 5: Pagespeed Insights der mit Astro implementierten Beispiel-Web-Anwendung<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Astro ist zu diesem Zeitpunkt ein sehr neues Framework, das meiner Meinung nach viel Potential hat. Die Art und Weise, auf die Webseiten gebaut werden und die Einfachheit, mit der dies m\u00f6glich ist, ohne komplett fremd zu wirken hat einen positiven Eindruck hinterlassen. W\u00e4hrend es sich f\u00fcr Seiten, die wenig Dynamik erfordern, sehr gut eignet, gibt es meiner Meinung nach bisher relativ wenige Anwendungsf\u00e4lle, die durch den Einsatz von Astro profitieren w\u00fcrden und Astro somit zu einem Nischenprodukt wird.<br>Jedoch ist die Technologie in den Anfangsstadien und wird sich in den n\u00e4chsten Jahren in gro\u00dfem Ma\u00dfe weiterentwickeln.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quellen<\/h2>\n\n\n\n<p>[1] Zammetti, F. (2020). What Is JAMstack All About?. In: Practical JAMstack.<br>Apress, Berkeley, CA. <a href=\"https:\/\/doi.org\/10.1007\/978-1-4842-6177-4_1\">https:\/\/doi.org\/10.1007\/978-1-4842-6177-4_1<\/a><br><\/p>\n\n\n\n<p>[2] What is the MEAN Stack?<br><a href=\"https:\/\/www.mongodb.com\/mean-stack\">https:\/\/www.mongodb.com\/mean-stack<\/a> (Zugriff am 14.01.2023)<br><\/p>\n\n\n\n<p>[3] JAM v LAMP v MERN v MEAN Stack<br><a href=\"https:\/\/dev.to\/salmansiddique\/jam-v-lamp-v-mern-v-mean-stack-470l\">https:\/\/dev.to\/salmansiddique\/jam-v-lamp-v-mern-v-mean-stack-470l<\/a> (Zugriff am 15.01.2023)<br><\/p>\n\n\n\n<p>[4] What is Astro.js?<br><a href=\"https:\/\/dev.to\/omher\/what-is-astrojs-500c\">https:\/\/dev.to\/omher\/what-is-astrojs-500c<\/a> (Zugriff am 19.01.2023)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einleitung Seit den fr\u00fchen Tagen der Web-Entwicklung hat die Performance von Websites eine wichtige Rolle gespielt. W\u00e4hrend sich das Internet im Laufe der Jahre weiterentwickelt hat, haben sich auch die Anforderungen an die Performance von Websites erh\u00f6ht. Benutzer erwarten eine schnelle und reibungslose Nutzererfahrung, unabh\u00e4ngig von der Gr\u00f6\u00dfe ihres Ger\u00e4ts oder ihrer Internetverbindung. Eine schlechte [&hellip;]<\/p>\n","protected":false},"author":1115,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,649,262,21],"tags":[],"ppma_author":[887],"class_list":["post-23945","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-interactive-media","category-rich-media-systems","category-system-architecture"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":21872,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2022\/01\/17\/drei-sekunden-sind-zu-lang-auswirkung-der-ladezeit-von-webseiten-auf-die-user-experience\/","url_meta":{"origin":23945,"position":0},"title":"Drei Sekunden sind zu lang &#8211; Auswirkung der Ladezeit von Webseiten auf die User Experience","author":"Sarah Schwab","date":"17. January 2022","format":false,"excerpt":"Warum ist es so wichtig, die optimale Ladezeit anzustreben? Auf jemanden oder auf etwas zu waren ist uns Menschen nicht fremd. Im Schnitt verbringt jeder Mensch in seinem Leben rund ein bis zwei Jahre mit Warten. Dies kann an der Bushaltestelle, Suppermarktkasse, dem Abwarten auf die Ankunft einer Zustellung, oder\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/mFjlE1bSwg2Fk8eaWW2eQy-2Qk9CiihxoD5ul4gle6YmjmIPyOjPk2vHwDOtdVDgF13QTDdhmdZgkUAG8oqqOo1u8IAxSjrzVTtMYxVqYUiQ_3-W0lwTrSUt3_cL8jlcK_Cn0hDA.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/mFjlE1bSwg2Fk8eaWW2eQy-2Qk9CiihxoD5ul4gle6YmjmIPyOjPk2vHwDOtdVDgF13QTDdhmdZgkUAG8oqqOo1u8IAxSjrzVTtMYxVqYUiQ_3-W0lwTrSUt3_cL8jlcK_Cn0hDA.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/mFjlE1bSwg2Fk8eaWW2eQy-2Qk9CiihxoD5ul4gle6YmjmIPyOjPk2vHwDOtdVDgF13QTDdhmdZgkUAG8oqqOo1u8IAxSjrzVTtMYxVqYUiQ_3-W0lwTrSUt3_cL8jlcK_Cn0hDA.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/mFjlE1bSwg2Fk8eaWW2eQy-2Qk9CiihxoD5ul4gle6YmjmIPyOjPk2vHwDOtdVDgF13QTDdhmdZgkUAG8oqqOo1u8IAxSjrzVTtMYxVqYUiQ_3-W0lwTrSUt3_cL8jlcK_Cn0hDA.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":23775,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/01\/29\/business-case-web-performance-optimization-wann-lohnt-es-sich\/","url_meta":{"origin":23945,"position":1},"title":"Business Case \u201eWeb Performance Optimization\u201c. Wann lohnt es sich?","author":"Anke M\u00fcller","date":"29. January 2023","format":false,"excerpt":"Onlineshops wie Amazon sind heutzutage nicht mehr wegzudenken. Doch nicht jeder Onlineshop wird automatisch erfolgreich, da die Webseiten oft aufgrund hoher Datenmengen, verursacht durch beispielsweise Bilder, eine hohe Ladezeit besitzen. Menschen werden zunehmend ungeduldiger und warten nicht gerne auf Suchergebnisse. Nahezu jede Person kennt heutzutage das Gef\u00fchl, eine Webseite zu\u2026","rel":"","context":"In &quot;Interactive Media&quot;","block_context":{"text":"Interactive Media","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/interactive-media\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/01\/Bild3.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/01\/Bild3.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/01\/Bild3.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":26698,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2025\/01\/30\/cloud-basiertes-performance-monitoring-fur-rich-media-systeme\/","url_meta":{"origin":23945,"position":2},"title":"Cloudbasiertes Performance-Monitoring f\u00fcr Rich-Media-Systeme","author":"Simon Wimmer","date":"30. January 2025","format":false,"excerpt":"Problemstellung In einer zunehmend digitalisierten Welt haben sich Rich-Media-Systeme zu einem integralen Bestandteil unseres Alltags entwickelt. Diese Systeme umfassen komplexe Informations- und Kommunikationsumgebungen, die verschiedene Medienformen und interaktive Komponenten vereinen, um eine hohe Informationstiefe und Interaktionsdichte zu erreichen. Beispiele hierf\u00fcr sind Video-Streaming-Dienste, Augmented Reality (AR) Anwendungen und interaktive Webinhalte. Die\u2026","rel":"","context":"In &quot;Rich Media Systems&quot;","block_context":{"text":"Rich Media Systems","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/interactive-media\/rich-media-systems\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/01\/dashboard-150x150.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/01\/dashboard-150x150.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/01\/dashboard-150x150.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/01\/dashboard-150x150.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/01\/dashboard-150x150.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2025\/01\/dashboard-150x150.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":12512,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/27\/progressive-web-apps-wer-braucht-noch-native-apps\/","url_meta":{"origin":23945,"position":3},"title":"Progressive Web Apps &#8211; Wer braucht noch native Apps?","author":"Fabiola Dums","date":"27. February 2021","format":false,"excerpt":"Progressive Web Apps sollen es erm\u00f6glichen die Vorteile des Webs und die nativer Apps zu nutzen, um so f\u00fcr jeden, \u00fcberall und auf jedem Ger\u00e4t, nutzbar zu sein. Was Progressive Web Apps eigentlich sind, welche Vor- und Nachteile sie mit sich bringen und ob sie in Zukunft native Apps komplett\u2026","rel":"","context":"In &quot;Interactive Media&quot;","block_context":{"text":"Interactive Media","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/interactive-media\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Bildschirmfoto-2021-02-26-um-12.21.05.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Bildschirmfoto-2021-02-26-um-12.21.05.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Bildschirmfoto-2021-02-26-um-12.21.05.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Bildschirmfoto-2021-02-26-um-12.21.05.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Bildschirmfoto-2021-02-26-um-12.21.05.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/Bildschirmfoto-2021-02-26-um-12.21.05.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":8217,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/08\/29\/progressive-web-apps-wer-braucht-noch-eine-native-app\/","url_meta":{"origin":23945,"position":4},"title":"Progressive Web Apps \u2013 Wer braucht noch eine native App?","author":"Dominik Zinser","date":"29. August 2019","format":false,"excerpt":"Beispiele zum Einstieg Progressive Web Apps sind schon weiter verbreitet wie man denkt. Auch gro\u00dfe, innovative Unternehmen Twitter, Airbnb, Spotify oder Tinder setzen auf Progressive Web Apps. Abb. 1: Eine Auswahl von Progressive Web Apps [1] Wer sich ein tolles Beispiel anschauen m\u00f6chte, dem empfehle ich https:\/\/riorun.theguardian.com\/ (auf mobile) zu\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/1-150x150.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/1-150x150.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/1-150x150.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/1-150x150.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":23834,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/02\/01\/designing-for-performance\/","url_meta":{"origin":23945,"position":5},"title":"Designing for Performance","author":"Nadine Schuler","date":"1. February 2023","format":false,"excerpt":"Verbesserung der Performance\u00a0durch Optimierung der User Experience F\u00fcr ein besseres Lesegef\u00fchl wird in diesem Artikel das generische Maskulinum verwendet. Dies schlie\u00dft nat\u00fcrlich alle Geschlechter ein. 1. Einleitung \u201eIf you are making decisions about the look and feel of a website, you are making decisions that directly impact the performance of\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":887,"user_id":1115,"is_guest":0,"slug":"zack_walker","display_name":"zack walker","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/dd3244842cc92ba00b5b18a7bde62bcf4fe704c1f0408fad0290ac2cbaf81264?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/23945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/1115"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=23945"}],"version-history":[{"count":2,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/23945\/revisions"}],"predecessor-version":[{"id":23952,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/23945\/revisions\/23952"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=23945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=23945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=23945"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=23945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}