title: Developing a Community Website on JAMstack with GIT Managed Content and a Isomorphic Rendering Approach version: 1 layout: presentation.11ty.js revealOptions: transition: 'slide' backgroundTransition: 'fade' center: false

Wie bin ich auf diesen Titel gekommen???

undefined

Christian Noss

undefined

Disclaimer

  • Sichtweisen und Kontexte sind eher persönlich
  • Sachverhalte sind oft verkürzt dargestellt
  • Schlüsse sind zugunsten der Prägnanz oft plakativ

Developing a Community Website on JAMstack with GIT Managed Content and a Isomorphic Rendering Approach

irgendwo zwischen informationsgetriebener Website(z.B. Wikipedia) und funktionsgetrieber Web-App (z.B. Gmail, Spotify)

1993

Ziel


HTML & VIM, Webserver, Telnet, Mosaic > Seite funktioniert: Waaaaahnsinn!!

Kernfrage: läuft die Seite?

1998

HTML, CSS, VIM BBedit, Mosaic Netscape Navigator, Webserver, FTP, Telnet, CGI/Perl > Seite funktioniert und sieht irgendwie gut aus: yeeeeaaaah!!

Kernfragen: laufen die Skripte und sieht die Seite gut aus?

2003

HTML XHTML, CSS, Javascript, DHTML oder Flash, BBedit, Netscape Navigator Internet/Explorer/Safari/Firefox, Webserver(Produktiv), Webserver(Dev), SFTP, SSH, CGI/Perl PHP, CMS(Produktiv), CMS(Dev), (My)SQL-DB(Produktiv), (My)SQL-DB(Dev), SVN > Seite funktioniert, sieht auf verschiedenen Browsern korrekt aus, hat coole grafische Effekte, Kunde versteht das CMS, PHP Skripte laufen, JS Skripte laufen auch im IE, Seite ist barrierefrei, Code ist valide und wohlgeformt, Sync vom Dev ins Live System funktioniert, WebMetrics laufen: yeah!

Kernfrage: Findet der Google Bot die Seiten?

2008

XHTML, CSS, Javascript, script.aculo.us, Flash, VIM BBedit Sublime, AJAX, Mosaic Netscape Navigator Chrome/Internet Explorer/Safari/Firefox, iPhone, Webserver(Produktiv), Webserver(Staging), Webserver(Dev), SFTP, SSH, PHP, Code-Ignitor, CMS(Produktiv), CMS(Dev), (My)SQL-DB(Produktiv), (My)SQL-DB(Dev), SVN > Seite funktioniert, sieht auf verschiedenen Browsern korrekt aus, hat coole grafische Effekte, Kunde versteht das CMS, PHP Skripte laufen, JS Skripte laufen auch im IE, Seite ist barrierefrei, Code ist valide und wohlgeformt, Sync vom Dev ins Live System funktioniert, Site wird von Google indiziert, WebMetrics laufen, Seite funktioniert irgendwie auch auf dem iPhone: yeah!

Kernfragen: Läuft die Seite auf dem iPhone vom Chef halbwegs?

2013

HTML XHTML HTML5, CSS CSS3, Less/Sass, Javascript, script.aculo.us jQuery, Bootstrap/Foundation, AngularJS, AJAX, VIM BBedit Sublime, Mosaic Netscape Navigator/Chrome/Internet Explorer/Safari/Firefox, iPhone/Android/iPad, Webserver(Produktiv), Webserver(Staging), Webserver(Dev), SFTP, SSH, PHP, Code-Ignitor Laravel, Flatfile-CMS(Produktiv), Flatfile-CMS(Dev), (My)SQL-DB(Produktiv), (My)SQL-DB(Dev), Git, Grunt > Seite funktioniert, sieht auf verschiedenen Browsern korrekt aus, Kunde versteht das CMS, Skripte laufen, Seite ist barrierefrei performant, Code ist valide komprimiert und wohlgeformt, Build Chain funktioniert, Deployment Pipeline funktioniert, Site wird von Google indiziert, WebMetrics laufen, Seite funktioniert gut auf allen Desktops, Smartphones und Tablets, wahrgenommene Performance ist gut: puh!

Kernfragen: Funktionieren die Build Chain und Deployment Pipeline?

2018

HTML XHTML HTML5, CSS CSS3, Less Sass, Javascript ECMAScript 2017, Babel, script.aculo.us jQuery, Bootstrap/Foundation/SemnaticUI/Bulma/UIKit/, Angular/React/Vue, ~~AJAX~8, VIM BBedit Sublime, Mosaic Netscape Navigator/Chrome/Internet Explorer/Safari/Firefox, iPhone/Android/iPad, Webserver(Produktiv), Webserver(Staging), Webserver(Dev), SFTP, SSH, PHP, Code-Ignitor Laravel, Flatfile-CMS(Produktiv), Flatfile-CMS(Dev), (My)SQL-DB(Produktiv), (My)SQL-DB(Dev), HeadlessCMS, JAMStack, Git, Grunt WebPack, NPM > Seite funktioniert, sieht auf verschiedenen Browsern korrekt aus, Kunde versteht das CMS, Skripte laufen, Seite ist barrierefrei performant, Code ist valide komprimiert und wohlgeformt, Build Chain funktioniert, Deployment Pipeline funktioniert, Site wird von Google indiziert, WebMetrics laufen, Seite funktioniert gut auf allen Desktops, Smartphones und Tablets, wahrgenommene Performance ist gut: puh!

Kernfrage: Ist mein Stack noch zeitgemäß?


Developing a Community Website on JAMstack with GIT Managed Content and a Isomorphic Rendering Approach

Fabian Pfortmüller


Case Study: Developing a Community Website on JAMstack with GIT Managed Content and a Isomorphic Rendering Approach

Content is king.

Bill Gates


Case Study: Developing a Community Website on JAMstack with GIT Managed Content and a Isomorphic Rendering Approach

Oder passender: Content Management

Aufgaben eines Content Management Systems

undefined

Structured Content vs. „Layouted“ Content

undefined




  • Content ist da und kann publiziert werden
  • Content liegt in den Strukturen des CMS
  • Content kann schlecht weiter verarbeitet werden
  • Content ist segmentiert
  • Semantik geht verloren
  • Merging von Content bei vielen parallelen Pflegeprozessen ist schwer

Organizing

Wie wird strukturiert?

  • im CMS Backend
  • mit Kategorien
  • mit weiteren Taxonomien, z.B. Tags

Publishing

Wie wird ausgeliefert?

  • Content Pflege ist mühsam
  • Content zerfällt/ wird segmentiert
  • Organisation ist umständlich
  • Merge von Datenständen ist sau kompliziert
  • Content lässt sich schlecht weiter verarbeiten
  • Content ist in den Strukturen des Systems „gefangen“
  • Content Migration in ein anderen System ist sehr komplex
  • Publishing ist langsam
  • Bedienung von verschiedenen Ausgabekanälen ist mühsam
  • Publishing skaliert schlecht
  • System bietet viele Angriffsvektoren
  • monolithisches System

Why not?


Case Study: Developing a Community Website on JAMstack with GIT Managed Content and a Isomorphic Rendering Approach

Coined by Mathias Biilmann, Netlify

  • WISA stack: Windows, IIS, SQL Server, ASP.NET
  • LAMP: Linux, Apache, MySQL, Python || Perl || PHP
  • MEAN: MongoDB, express.js, angular.js, node.js
  • MERN: MongoDB, Express.js, React.js, Node.js

JAM

Javascript, APIs and Markup

Any dynamic programming during the request/response cycle is handled by JavaScript, running entirely on the client. This could be any frontend framework, library, or even vanilla JavaScript.

All server-side processes or database actions are abstracted into reusable APIs, accessed over HTTP with JavaScript. These can be custom-built or leverage third-party services.

Templated markup should be prebuilt at deploy time, usually using a site generator for content sites, or a build tool for web apps.

#microservices #decoupling #antimonolithic

Bausteine des Stacks

#1 Creating Content

  • übersichtlich
  • in sich geschlossen
  • flat
  • leicht zu editieren
  • leicht weiter zu verarbeiten

#2 Organizing Content

  • bekanntes mentales Modell
  • übersichtlich
  • leicht und schnell zu editieren
  • Versionierung
  • Merging
  • Branching
  • zusätzliche Tools, z.B. Issues

#3 Publishing Content

  • rendered at buildtime via static site generator
  • deployed to simple webserver or cdn
  • additional data via javascript and APIs
  • superschnell und skalierbar
  • sehr sicher
  • minimale Anforderungen an den Server
  • Pflege der Inhalte ist leicht
  • Inhalte bleiben in sich geschlossen
  • Inhalte sind portierbar
  • Inhalte können versioniert werden
  • verschiedene Stände können gemerged werden
  • verschiedene Kanäle können recht gut bedient werden
  • Trennung von Content und Layout ist gut möglich
  • Organisation von Inhalten ist sehr einfach
  • Publishing ist schnell
  • Publishing ist sicher
  • Publishing skaliert gut
  • Best-of-Breed Ansatz mit lose gekoppelten Systemen
  • unterstützt paralleles Entwickeln von Code und Content

Case Study: Developing a Community Website on JAMstack with GIT Managed Content and a Isomorphic Rendering Approach

Die Medieninformatik Website ist der Schweizer Taschenmesser für die Kommunikation nach außen und innen. Sie richtet sich an alle Zielgruppen und stellt Informationen und Einblicke in das Forschungs- und Lehrgebiet Medieninformatik für die verschiedenen Zielgruppen bereit. Hier landet im Grunde alles, was in den anderen Kanälen nicht passt, oder was für längere Zeit vorgehalten werden soll. Schwerpunkt des Inhalts sind Artefakte, die im Rahmen von Projekten oder Abschlussarbeiten entstanden sind. Inhalte werden folgenden Hauptrubriken zugeordnet:

  • mission: alles rund im die Mission des Fachgebiets
  • people: alles rund im die Leute in der MI
  • projects: Berichte und Ergebnisse aus Projekten
  • pulse: alles, was gerade so passiert
  • research: Berichte und Ergebnisse aus Forschungsvorhaben und Kooperationen
  • study: alles rund ums Studium
  • toolbox: Helferlein für den Alltag von Medieninformatikern

Thanks to Phil Hawksworth

  • meaningful URL for every Page (or Piece) of Content
  • alle URLs sind Crawable, Curlaable und indizierbar
  • jede URL liefert wirklichen Content
  • URLs sind möglichst stabil
  • schnelles Rendering und gute, wahrgenommene Performance
  • hohe Ausfallsicherheit
  • geringen Payload
  • Möglichkeit für Übergänge and visuelle Effekte
  • minimale Hosting Komplexität
  • Fokus auf Content/ Dokumente
  • Offenheit des Systems
  • in sich geschlossene Dokumente
  • Zweitverwertung von Dokumenten ist leicht möglich
  • unterschiedliche Autoren
  • einfache Struktur
  • Layout und Content entkoppelt

Slide 77

undefined

Hugo

Ein sehr flexiber und schneller Static Site Generator.

Hugos inhaltliches Basiskonzept

  • Markdown ist wirklich hübsch
  • die Kombination aus Markdown und Git ist topp!
  • Entwurf eines Systems um den Content herum ist interessant aber gar nicht so leicht
  • konsequente Trennung von Content und Layout ist gar nicht so leicht
  • Hugo's Lookup Order ist recht komplex
  • Hugo's Lists & Pages Konzept ist cool, aber herausforderend

HTML, AMP, JSON, XML


Case Study: Developing a Community Website on JAMstack with GIT Managed Content and a Isomorphic Rendering Approach

Javascript Page Rendering


  • Bessere wahrgenommene Performance
  • Visuelle Effekte
  • Suchfunktionen
  • maschinenlesbare Inhalte





JAMstack first?


#Netlify #Flatfile CMS #Headless CMS


Slides unter http://christian-noss.de/latest

icon:twitter twitter.com/cnoss
icon:facebook www.facebook.com/cnoss

Danke für's Mitmachen

https://christiannoss.de