Website Performance bei ZEIT Online

A presentation at Dev & Design Meetup Hamburg #4 in November 2023 in Hamburg, Germany by Thomas Puppe

Slide 1

Slide 1

Website Performance bei Thomas Puppe Dev & Design Meetup Hamburg 09.11.2023

Slide 2

Slide 2

Hi, ich bin Thomas 👋 Senior Frontend Developer bei ZEIT Online #a11y, #leanweb, #webperf​

Slide 3

Slide 3

Credits: apple.com, Lee Campbell auf Unsplash, Shiwa ID auf Unsplash

Slide 4

Slide 4

www !== wealthy western web

Slide 5

Slide 5

Slide 6

Slide 6

Slide 7

Slide 7

Slide 8

Slide 8

Website Performance

Slide 9

Slide 9

Slide 10

Slide 10

Server-Side-Rendered Selective Resumable​ Hydration​

Slide 11

Slide 11

Server-Side-Rendered Selective Resumable​ Hydration​ HTML Website mit CSS JavaScript als Progressive Enhancement​

Slide 12

Slide 12

Progressive Enhancement bei ZEIT Online HTML vom Server CSS dazu JavaScript optional

Slide 13

Slide 13

Aspekte von Aus Usersicht Website schnell / schlank / ruckelt nicht​ Performance Browser / Technologien HTML / CSS / Bilder / JavaScript / Schriften / Video / Audio Priorisierung im Netzwerk und im Browser​ ​ Build / Server Bildformate / Komprimierung / CDN, Cloud / Caching / Netzwerk Wirkung Objektive Zahlen / Subjektive Wahrnehmung / Gemessene Realität von Google Kontrolle Messung / Testing / Monitoring / SEO Einfluss

Slide 14

Slide 14

Drei Säulen von Website Performance A R O

Slide 15

Slide 15

Drei Säulen von Website Performance A R O AVOID REDUCE OPTIMIZE

Slide 16

Slide 16

Drei Säulen von Website Performance A R O AVOID REDUCE OPTIMIZE Benutzen wir alles? Cachen, Ladeverhalten und Brauchen wir alles?​ Komprimieren, Priorisierung. ​Minimieren.

Slide 17

Slide 17

Drei Fünf Säulen von Website Performance A R O M A AVOID REDUCE OPTIMIZE MEASURE ATTITUDE Benutzen wir alles? Cachen, Ladeverhalten und Tooling und Performance Brauchen wir alles?​ Komprimieren, Priorisierung Monitoring​ Culture​ ​Minimieren.

Slide 18

Slide 18

Drei Fünf Säulen von Website Performance A R O M A AVOID REDUCE OPTIMIZE MEASURE ATTITUDE Benutzen wir alles? Cachen, Ladeverhalten und Tooling und Performance Brauchen wir alles?​ Komprimieren, Priorisierung Monitoring​ Culture​ ​Minimieren.

Slide 19

Slide 19

AVOID

Slide 20

Slide 20

Avoid Stuff: ungenutzte Sachen finden Browser DevTools

Slide 21

Slide 21

Browser Developer Tools Network Tab Filter: domain, larger-than, status-code, priority, … https://developer.chrome.com/docs/devtools/network/reference/​

Slide 22

Slide 22

Avoid Stuff: ungenutzte Sachen finden Browser DevTools Request Maps

Slide 23

Slide 23

Avoid Request Maps • requestmap.webperf.tools ​ • requestmap.pages.dev Gute Visualisierung, wenn die Request-Liste in den DevTools nicht ausreicht. Oder um Stakeholder zu beeindrucken!​

Slide 24

Slide 24

Avoid Request Maps • requestmap.webperf.tools ​ • requestmap.pages.dev Gute Visualisierung, wenn die Request-Liste in den DevTools nicht ausreicht. Oder um Stakeholder zu beeindrucken!​

Slide 25

Slide 25

Avoid Request Maps • requestmap.webperf.tools ​ • requestmap.pages.dev Gute Visualisierung, wenn die Request-Liste in den DevTools nicht ausreicht. Oder um Stakeholder zu beeindrucken!​

Slide 26

Slide 26

Avoid Stuff: ungenutzte Sachen finden Browser DevTools Request Maps Google Tag Manager ausmisten

Slide 27

Slide 27

Avoid Stuff: ungenutzte Sachen finden Browser DevTools Request Maps Google Tag Manager ausmisten Unused CSS/JS via DevTools

Slide 28

Slide 28

Unused CSS/JS

Slide 29

Slide 29

Unused CSS/JS

Slide 30

Slide 30

Unused CSS/JS

Slide 31

Slide 31

Unused CSS/JS

Slide 32

Slide 32

Unused CSS/JS vermeiden durch situatives Laden von Code • Aufteilung nach Seitentypen (centerpage.css, article.css) ​ • Vorhandensein von Elementen checken​

Slide 33

Slide 33

Avoid Code: System Features nutzen

Slide 34

Slide 34

Avoid Code: System Features nutzen Summary / Details

Slide 35

Slide 35

Summary / Details: HTML Reveal Element

Slide 36

Slide 36

Summary / Details: HTML Reveal Element

Slide 37

Slide 37

Avoid Code: System Features nutzen Summary / Details Dialog / Modal Feature

Slide 38

Slide 38

Slide 39

Slide 39

Slide 40

Slide 40

Slide 41

Slide 41

Slide 42

Slide 42

Avoid Code: System Features nutzen Summary / Details Dialog / Modal Feature Karusselle und Slider

Slide 43

Slide 43

Karusselle und Slider: auch selfmade!

Slide 44

Slide 44

Avoid Code: System Features nutzen Summary / Details Dialog / Modal Feature Karusselle und Slider … you get the Point.

Slide 45

Slide 45

Drei Fünf Säulen von Website Performance A R O M A AVOID REDUCE OPTIMIZE MEASURE ATTITUDE Benutzen wir alles? Cachen, Ladeverhalten und Tooling und Performance Brauchen wir alles?​ Komprimieren, Priorisierung Monitoring​ Culture​ ​Minimieren.

Slide 46

Slide 46

Reduce

Slide 47

Slide 47

Reduce Caching

Slide 48

Slide 48

Caching und CDN / Proxy Cache​ • deutliches Alarmsignal • wird dir von jedem Testing Tool um die Ohren gehauen • kurze Cache-Zeiten sollten gut begründet sein • immutable nutzen!

Slide 49

Slide 49

Caching und CDN / Proxy Cache​ • deutliches Alarmsignal • wird dir von jedem Testing Tool um die Ohren gehauen • kurze Cache-Zeiten sollten gut begründet sein • immutable nutzen!

Slide 50

Slide 50

Caching und CDN / Proxy Cache​ • deutliches Alarmsignal • wird dir von jedem Testing Tool um die Ohren gehauen • kurze Cache-Zeiten sollten gut begründet sein • immutable nutzen! ​ • TESTEN!​

Slide 51

Slide 51

Reduce Caching Caching via ServiceWorker

Slide 52

Slide 52

Browser Caching via Service Worker​ HTTP Cache CDN Server

Slide 53

Slide 53

Browser Service Worker HTTP Cache CDN TabletGothic.woff2 Franziska.woff2 Caching via Service Worker​ Der Service Worker ist wie ein programmierbarer Proxy Server, mit dem sich Requests und Responses per JavaScript ​modifizieren lassen. Er verfügt über einen eigenen Cache.​ Server

Slide 54

Slide 54

Browser Service Worker HTTP Cache CDN TabletGothic.woff2 Franziska.woff2 Caching via Service Worker​ Der Service Worker ist wie ein programmierbarer Proxy Server, mit dem sich Requests und Responses per JavaScript ​modifizieren lassen. Er verfügt über einen eigenen Cache. Dieser Cache ist theoretisch schneller​(praktisch nicht). Dieser Cache speichert deutlich länger bei gleicher TTL.​* Server

Slide 55

Slide 55

Browser Service Worker HTTP Cache CDN TabletGothic.woff2 Franziska.woff2 Caching via Service Worker​ Der Service Worker ist wie ein programmierbarer Proxy Server, mit dem sich Requests und Responses per JavaScript ​modifizieren lassen. Er verfügt über einen eigenen Cache. Dieser Cache ist theoretisch schneller​(praktisch nicht). Dieser Cache speichert deutlich länger bei gleicher TTL.​* Server

Slide 56

Slide 56

Reduce Caching Caching via ServiceWorker Komprimierung

Slide 57

Slide 57

Slide 58

Slide 58

Komprimierung: gzip, brotli • Gzip als default, drop-in-Lösung ​ • brotli komprimiert 15–30% besser, aber • geringerer Browser-Support (93%) • dynamische Komprimierung dauert länger • Tweaking der 9 gzip und 11 brotli Stufen​ 😬

Slide 59

Slide 59

Komprimierung: gzip, brotli • Gzip als default, drop-in-Lösung ​ • brotli komprimiert 15–30% besser, aber • geringerer Browser-Support (93%) • dynamische Komprimierung dauert länger • 😬 Tweaking der 9 gzip und 11 brotli Stufen 🤯

Slide 60

Slide 60

Reduce Caching Caching via ServiceWorker Komprimierung Bildformate

Slide 61

Slide 61

WebP / Avif : Vorteile Größe in kB 680 png jpg 69.7 webp 48 32 avif Größe in kB 16.6 png jpg 24.4 webp avif 5.8 1

Slide 62

Slide 62

WebP / Avif : Nutzung

Slide 63

Slide 63

ZEIT Online unterstützt noch kein AVIF.

Slide 64

Slide 64

WebP / Avif : Einsatz Squoosh https://www.smashingmagazine.com/2021/09/modern-image-formats-avif-webp/

Slide 65

Slide 65

WebP / Avif : Einsatz bei ZEITOnline https://img.zeit.de/2023/47/ren-benko-immobilien-signa-gruppe-verluste-bild/wide__1000x562__desktop

Slide 66

Slide 66

Reduce Bildkomprimierung: Testing-Tools​ lokal: Lighthouse im Browser online: webspeedtest.cloudinary.com

Slide 67

Slide 67

Reduce Caching Caching via ServiceWorker Komprimierung Bildformate Responsive Images

Slide 68

Slide 68

Responsive Images

Slide 69

Slide 69

Responsive Images Credit: httparchive.org

Slide 70

Slide 70

Responsive Images Credit: httparchive.org

Slide 71

Slide 71

Responsive Images Credit: httparchive.org

Slide 72

Slide 72

Responsive Images Credit: httparchive.org

Slide 73

Slide 73

Reduce Responsive Images Checker 1) DevTools 2) Lighthouse 3) Online Tools wie https://toolsaday.com/seo/ responsive-image-checker

Slide 74

Slide 74

Reduce Caching Caching via ServiceWorker Komprimierung Bildformate Responsive Images Schriften: woff2 Format

Slide 75

Slide 75

Schriften: Woff 2 Format 200 198 • Vergesst andere Formate! 150 • 100 • Kompatibilität mit alten 80 61 50 0 ttf Format woff Format ✅ Browser-Support woff2 Format Browsern wollen wir nicht.

Slide 76

Slide 76

Reduce Caching Caching via ServiceWorker Komprimierung Bildformate Responsive Images Schriften: woff2 Format Schriften: Subsetting

Slide 77

Slide 77

Reduce Schriften: Subsetting • https://wakamaifondue.com für Schriften-Eigenschaften​​

Slide 78

Slide 78

Reduce Schriften: Subsetting • https://wakamaifondue.com für Schriften-Eigenschaften​ ​ • https://everythingfonts.com/ subsetter als Subsetting-GUI 150 80 100 61 50 13 Su bs et La tin of f2 w of f2 Fo rm at 0 w of fF or m at • https://transfonter.org/​ 200 tt fF or m at ​ 198

Slide 79

Slide 79

Avoid Code System Fonts nutzen Vielleicht kannst du auf Webfonts verzichten. Die System-Schriften auf den Betriebssystemen sind vielfältig. • https://modernfontstacks.com/ • https://gist.github.com/ don1138/5761014 ​ • https://meowni.ca/ font-style-matcher/​

Slide 80

Slide 80

Reduce Caching Komprimierung Bildformate Responsive Images Schriften: woff2 Format Schriften: Subsetting

Slide 81

Slide 81

Fünf Säulen von Website Performance A R O M A AVOID REDUCE OPTIMIZE MEASURE ATTITUDE Benutzen wir alles? Cachen, Ladeverhalten und Tooling und Performance Brauchen wir alles?​ Komprimieren, Priorisierung Monitoring​ Culture​ ​Minimieren.

Slide 82

Slide 82

Slide 83

Slide 83

Optimize Lazy Loading

Slide 84

Slide 84

Lazy Loading

Slide 85

Slide 85

Lazy Loading via JavaScript​

Slide 86

Slide 86

Lazy Loading via JavaScript​

Slide 87

Slide 87

Lazy Loading via JavaScript​

Slide 88

Slide 88

Lazy Loading nativ Natives Lazyloading im Browser:

Slide 89

Slide 89

Lazy Loading nativ Natives Lazyloading im Browser:

Slide 90

Slide 90

Lazy Loading Mit loading=lazy übergibt man die Kontrolle an den Browser. Und der macht vielleicht Dinge, die man nicht möchte. nativ Zum Beispiel wird mehr vorgeladen, wenn die Internetverbindung langsam ist! kein Throttling: 2 Bilder fast 3G: 7 Bilder slow 3G: 16 Bilder

Slide 91

Slide 91

Lazy Loading bei ZEIT Online: handmade • force HighResolution • • Infografiken avoid HighResolution • DataSaver • langsames Netzwerk • Pixelperfect auf den Container zugeschnitten • zuverlässiges Rescaling

Slide 92

Slide 92

Lazy Loading bei ZEIT Online • force HighResolution • • Infografiken avoid HighResolution • DataSaver • langsames Netzwerk • Pixelperfect auf den Container zugeschnitten • zuverlässiges Rescaling

Slide 93

Slide 93

Optimize Lazy Loading Fassaden

Slide 94

Slide 94

Fassaden

Slide 95

Slide 95

Fassaden

Slide 96

Slide 96

Fassaden

Slide 97

Slide 97

Fassaden

Slide 98

Slide 98

Fassaden • Videos (youtube/vimeo-lite) • Social Media Widgets • Chats, Support-Messenger • Spiele, Interaktives • Dashboards in Apps • Formular-Logik

Slide 99

Slide 99

Fassaden • Videos (youtube/vimeo-lite) • Social Media Widgets • Chats, Support-Messenger • Spiele, Interaktives • Dashboards in Apps • Formular-Logik

Slide 100

Slide 100

Optimize Lazy Loading Fassaden Rel=Preload

Slide 101

Slide 101

Hero-Image preloaden Manchmal werden wichtige Bilder erst spät geladen – weil andere Sachen vorher im HTML stehen, weil die Bilder erst im CSS erwähnt werden, oder weil sie per JavaScript geladen werden.

Slide 102

Slide 102

Preload​ Mit Preload-Links können wir im Head einer HTML-Seite dem Browser schon Hinweise geben auf Ressourcen, die während dem Rendern gebraucht werden. Unterstützt: Bilder, Videos, CSS, JS. Schriften!

Slide 103

Slide 103

Hero-Image mit rel=preload

Slide 104

Slide 104

rel=preload​Browsersupport und Verbreitung

Slide 105

Slide 105

Optimize Lazy Loading Fassaden Rel=Preload Layout Shift

Slide 106

Slide 106

Cumulative Layout Shift Der Cumulative Layout Shift (CLS) ist eine Maßeinheit für unerwartetes Verschieben des Layouts einer Website. CLS ist einer der Core Web Vitals von Google und fließt mit in das Google-Ranking ein!

Slide 107

Slide 107

Slide 108

Slide 108

Slide 109

Slide 109

Platz freihalten gegen Layout-Shift​ aspect-ratio definiert für Box-Elemente automatisch die Höhe anhand der Breite. Der Wert ist eine Dezimalzahl, die man aber auch durch einen Bruch angeben kann.

Slide 110

Slide 110

Optimize Layout Shift • Chrome DevTools: • → Console Drawer • → Rendering • → Layout Shift • → Core Web Vitals ​ • Chrome Plugins ​ • https://defaced.dev/tools/ layout-shift-gif-generator/​ ​ • npm install -g layout-shift-gif​ ​ • JS Performance Observer API → Tracking​

Slide 111

Slide 111

Slide 112

Slide 112

Layout Shift durch Werbung​ Lösung ist auch hier das Freihalten von Platz. Aber wie viel? • mobil: Maximum + sticky ​ • Desktop: aktuell nichts, aber es gibt Ideen: • Minimum oder mittlerer Wert verringern den CLS zumindest.

Slide 113

Slide 113

Optimize Lazy Loading Fassaden Rel=Preload Layout Shift

Slide 114

Slide 114

Fünf Säulen von Website Performance A R O M A AVOID REDUCE OPTIMIZE MEASURE ATTITUDE Benutzen wir alles? Cachen, Ladeverhalten und Tooling und Performance Brauchen wir alles?​ Komprimieren, Priorisierung Monitoring​ Culture​ ​Minimieren.

Slide 115

Slide 115

Measure

Slide 116

Slide 116

Measure DevTools

Slide 117

Slide 117

Measure DevTools • Throttling • Local Source Overrides • Web Vitals Score • Layout Shift • Unused CSS/JS ​ • JavaScript: Memory, Frame Rate,​CPU Flame Graphs devtoolstips.org

Slide 118

Slide 118

Measure DevTools Lighthouse

Slide 119

Slide 119

Measure Lighthouse • Web Vital Scores • konkrete Todos zur Verbesserung • DevTools ​ • CLI npm install -g lighthouse​ ​ • npx lightouse

Slide 120

Slide 120

Measure Pagespeed Insights • Lighthouse, aber online​ pagespeed.web.dev

Slide 121

Slide 121

Measure Pagespeed Insights • Lighthouse, aber online​ pagespeed.web.dev

Slide 122

Slide 122

Measure DevTools Lighthouse Page Speed Insights Speedcurve

Slide 123

Slide 123

Measure Speedcurve • kontinuierliches Monitoring speedcurve.com

Slide 124

Slide 124

Measure Speedcurve • kontinuierliches Monitoring • Real User Monitoring speedcurve.com

Slide 125

Slide 125

Measure Speedcurve • kontinuierliches Monitoring • Real User Monitoring • Empfehlungen speedcurve.com

Slide 126

Slide 126

Measure Speedcurve • kontinuierliches Monitoring • Real User Monitoring • Empfehlungen • Benchmarks speedcurve.com

Slide 127

Slide 127

Measure Speedcurve • kontinuierliches Monitoring • Benchmark mit Konkurrenz​ speedcurve.com

Slide 128

Slide 128

Fünf Säulen von Website Performance A R O M A AVOID REDUCE OPTIMIZE MEASURE ATTITUDE Benutzen wir alles? Cachen, Ladeverhalten und Tooling und Performance Brauchen wir alles?​ Komprimieren, Priorisierung Monitoring​ Culture​ ​Minimieren.

Slide 129

Slide 129

“Performance Culture” bei ZEIT Online • Buy-in: Chefetage und SEO! • Performance als Non-Functional Requirement wie A11y • Performance-Probleme sind BUGs! • Persönliche Motivation der EntwicklerInnen • Konkurrenz-Benchmarks und Web Vitals

Slide 130

Slide 130

Third Party

Slide 131

Slide 131

Party

Slide 132

Slide 132

Slide 133

Slide 133

Challenge: Third-Party Inhouse Third-Party Externe Third-Party • Dashboards • Werbung • Scrollytelling • Tracking • Eigenwerbung für zB. Veranstaltungen • Dienste, Social Media

Slide 134

Slide 134

Challenge: Third-Party Inhouse Third-Party Externe Third-Party • Dashboards • Werbung • Scrollytelling • Tracking • Eigenwerbung für zB. Veranstaltungen • Dienste, Social Media Was tun ? • Code Reviews • Dashboards • bisschen Fatalismus

Slide 135

Slide 135

Challenge: Third-Party Inhouse Third-Party Externe Third-Party • Dashboards • Werbung • Scrollytelling • Tracking • Eigenwerbung für zB. Veranstaltungen • Dienste, Social Media Was tun ? Was tun? • Code Reviews • “Fassaden” • Dashboards • Kontakt suchen, oder Alternativen • bisschen Fatalismus • viel Fatalismus

Slide 136

Slide 136

Up-to-date bleiben • web.dev/fast • github.com/davidsonfellipe/awesome-wpo • www.smashingmagazine.com/category/performance/ • perfplanet.com ​ • calibreapp.com/blog • speedcurve.com/blog • debugbear.com/blog ​ • simonhearne.com/posts • csswizardry.com/archive • timkadlec.com/remembers thomaspuppe.de/talks/devdesign-hh-performance Slides und Links

Slide 137

Slide 137

Dankeschön ❤️

Slide 138

Slide 138

Dankeschön ❤️ Thomas is hiring @ ZEIT Online: dev.zeit.de

Slide 139

Slide 139

Dankeschön ❤️ Thomas is hiring @ ZEIT Online: dev.zeit.de www.thomaspuppe.de ​https://webperf.social/@thomaspuppe