Bilder als PNG (unoptimiert), kein lazy loading, keine Cache-Headers in nginx.
Nutzen
Deutlich schnellere Ladezeit, besonders auf Mobile. Weniger Bandbreite.
Technische Umsetzung
Alle Bilder nach WebP konvertieren (mit Fallback)
loading=lazy auf alle img-Tags
nginx Cache-Headers für statische Assets
Masonry.js entfernen (wird nicht genutzt, spart 70KB)
Aufwand: Mittel | Risiko: Niedrig | Empfehlung: Sehr sinnvoll
## Problem
Bilder als PNG (unoptimiert), kein lazy loading, keine Cache-Headers in nginx.
## Nutzen
Deutlich schnellere Ladezeit, besonders auf Mobile. Weniger Bandbreite.
## Technische Umsetzung
1. Alle Bilder nach WebP konvertieren (mit Fallback)
2. loading=lazy auf alle img-Tags
3. nginx Cache-Headers für statische Assets
4. Masonry.js entfernen (wird nicht genutzt, spart 70KB)
## Aufwand: Mittel | Risiko: Niedrig | Empfehlung: Sehr sinnvoll
greggy
added the KI label 2026-05-14 00:29:42 +02:00
Repo:greggy/landingpage-haus-schleusingen Komplexität: M (Medium) Geschätzter Aufwand: 2–3h Risiko: Niedrig
1. Zusammenfassung
Die Landingpage lädt aktuell ~21 MB an unoptimierten Bildern (PNG/JPG). Es gibt kein Lazy Loading und nginx sendet keine Cache-Headers. Masonry.js (24 KB) wird eingebunden aber nie initialisiert – kann entfernt werden.
2. Ist-Zustand
Bilder (21 MB in /bilder/)
34 Bilddateien in 3 Formaten: PNG (12), JPG (13), JPEG (4), plus 5 -small Varianten als PNG
** -small Varianten** existieren für Thumbnails, sind aber oft noch PNG und nicht signifikant kleiner
Fehlende Datei:data-img="bilder/bad3.jpg" referenziert aber Datei heißt Bad-3.jpeg → 404 bei Lightbox-Click!
Fehlende Datei:data-img="bilder/WhatsApp Image 2026-03-30 at 07.50.42 (2).jpeg" und src="bilder/WhatsApp Image 2026-03-30 at 07.50.42 (2).jpeg" → Datei existiert nicht im Repo → 404!
HTML (haus-schleusingen.html)
30 <img> Tags, davon haben keines ein loading="lazy" Attribut
Hero-Bild wird als CSS background-image geladen (kein <img> Tag)
Galerie nutzt CSS Columns (.masonry-grid mit column-count), kein JS Masonry
JavaScript
js/masonry.pkgd.min.js (24 KB) wird nicht geladen/gelinkt im HTML (kein <script> Tag!) – Datei existiert nur im Repo, wird also nicht mal ausgeliefert. Kann einfach gelöscht werden.
js/haus-schleusingen.js nutzt jQuery für Animationen, Lightbox, Accordion – kein Masonry-Aufruf
nginx (nginx.conf)
Minimale Konfiguration, keine Cache-Headers für statische Assets
Kein Gzip aktiviert
Kein Brotli
Dockerfile
Present, static build mit nginx
3. Teilaufgaben
3.1 Bilder nach WebP konvertieren
Priorität: Hoch | Aufwand: 30 Min
Alle 34 Bilder nach WebP konvertieren mit cwebp -q 80 (Qualität 80)
Erwartete Einsparung: 60–80% der Dateigröße (21 MB → ~4–6 MB)
server{listen80;server_namelocalhost;root/usr/share/nginx/html;indexhaus-schleusingen.html;# Gzip aktivieren
gzipon;gzip_typestext/cssapplication/javascriptimage/svg+xml;gzip_min_length256;location/{try_files$uri$uri//haus-schleusingen.html;}# Lange Cache-Dauer für Bilder und statische Assets
location~*\.(jpg|jpeg|png|webp|gif|ico|svg|css|js|woff2?)$ {expires30d;add_headerCache-Control"public,immutable";access_logoff;}}
3.6 Defekte Referenzen reparieren
Priorität: Hoch | Aufwand: 10 Min
data-img="bilder/bad3.jpg" → korrigieren zu data-img="bilder/Bad-3.jpeg"
data-img="bilder/WhatsApp Image ..." und src="bilder/WhatsApp Image ..." → prüfen ob Datei existiert, ggf. entfernen oder korrigieren
4. Akzeptanzkriterien
Alle Bilder als WebP verfügbar (mit Original-Fallback)
Alle <img> Tags nutzen <picture> mit WebP-Source
loading="lazy" auf allen below-the-fold Bildern
js/masonry.pkgd.min.js gelöscht
nginx sendet Cache-Header (30d) für statische Assets
Browser ohne WebP-Support: Alte Safari-Versionen → Fallback über <picture> sichergestellt
Lightbox data-img: Muss sowohl WebP als auch Original-Pfad handhaben – am besten im JS den <source> srcset abfragen oder separate data-img-webp Attribute einführen
Hero-CSS-Background: Kein <picture> möglich → Lösung: per Modernizr/CSS Feature Query oder einfach das WebP direkt nutzen (95%+ Browser-Support) oder image-set() nutzen
Dateinamen mit Leerzeichen: Viele Dateien haben Leerzeichen → im Script korrekt quoten
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
Bilder als PNG (unoptimiert), kein lazy loading, keine Cache-Headers in nginx.
Nutzen
Deutlich schnellere Ladezeit, besonders auf Mobile. Weniger Bandbreite.
Technische Umsetzung
Aufwand: Mittel | Risiko: Niedrig | Empfehlung: Sehr sinnvoll
Spezifikation: Issue #17 – Bildoptimierung: WebP + Lazy Loading + Caching
Repo:
greggy/landingpage-haus-schleusingenKomplexität: M (Medium)
Geschätzter Aufwand: 2–3h
Risiko: Niedrig
1. Zusammenfassung
Die Landingpage lädt aktuell ~21 MB an unoptimierten Bildern (PNG/JPG). Es gibt kein Lazy Loading und nginx sendet keine Cache-Headers. Masonry.js (24 KB) wird eingebunden aber nie initialisiert – kann entfernt werden.
2. Ist-Zustand
Bilder (21 MB in
/bilder/)-smallVarianten als PNGKinderzimmer 3.jpg(2,8 MB),Kinderzimmer 2.jpg(2,5 MB),Außenansicht-2.png(2,5 MB)-smallVarianten** existieren für Thumbnails, sind aber oft noch PNG und nicht signifikant kleinerdata-img="bilder/bad3.jpg"referenziert aber Datei heißtBad-3.jpeg→ 404 bei Lightbox-Click!data-img="bilder/WhatsApp Image 2026-03-30 at 07.50.42 (2).jpeg"undsrc="bilder/WhatsApp Image 2026-03-30 at 07.50.42 (2).jpeg"→ Datei existiert nicht im Repo → 404!HTML (
haus-schleusingen.html)<img>Tags, davon haben keines einloading="lazy"Attributbackground-imagegeladen (kein<img>Tag).masonry-gridmitcolumn-count), kein JS MasonryJavaScript
js/masonry.pkgd.min.js(24 KB) wird nicht geladen/gelinkt im HTML (kein<script>Tag!) – Datei existiert nur im Repo, wird also nicht mal ausgeliefert. Kann einfach gelöscht werden.js/haus-schleusingen.jsnutzt jQuery für Animationen, Lightbox, Accordion – kein Masonry-Aufrufnginx (
nginx.conf)Dockerfile
3. Teilaufgaben
3.1 Bilder nach WebP konvertieren
Priorität: Hoch | Aufwand: 30 Min
cwebp -q 80(Qualität 80)-smallVarianten ebenfalls konvertierenKonvertierungs-Script:
3.2 HTML: WebP mit Fallback
Priorität: Hoch | Aufwand: 30 Min
Für jedes
<img>Tag ein<picture>Element erstellen:image-set()oder per<picture>im Hero umsetzen<img>Tags müssen konvertiert werdendata-imgAttribute für Lightbox auf.webpaktualisieren (mit Fallback-Logik im JS)3.3 Lazy Loading
Priorität: Hoch | Aufwand: 15 Min
loading="lazy"auf alle<img>Tags außer dem Hero-Intro-Bild (above the fold)3.4 Masonry.js entfernen
Priorität: Mittel | Aufwand: 5 Min
js/masonry.pkgd.min.jslöschen (24 KB).masonry-gridbleibt bestehen (reines CSS Columns Layout)3.5 nginx Cache-Headers
Priorität: Hoch | Aufwand: 15 Min
3.6 Defekte Referenzen reparieren
Priorität: Hoch | Aufwand: 10 Min
data-img="bilder/bad3.jpg"→ korrigieren zudata-img="bilder/Bad-3.jpeg"data-img="bilder/WhatsApp Image ..."undsrc="bilder/WhatsApp Image ..."→ prüfen ob Datei existiert, ggf. entfernen oder korrigieren4. Akzeptanzkriterien
<img>Tags nutzen<picture>mit WebP-Sourceloading="lazy"auf allen below-the-fold Bildernjs/masonry.pkgd.min.jsgelöscht5. Edge Cases
<picture>sichergestelltdata-img: Muss sowohl WebP als auch Original-Pfad handhaben – am besten im JS den<source>srcset abfragen oder separatedata-img-webpAttribute einführen<picture>möglich → Lösung: per Modernizr/CSS Feature Query oder einfach das WebP direkt nutzen (95%+ Browser-Support) oderimage-set()nutzen.dockerignoreprüfen6. Dateiänderungen
bilder/*.png/jpg/jpeghaus-schleusingen.html<picture>Tags,loading="lazy", defekte Refs reparierennginx.confjs/masonry.pkgd.min.jsjs/haus-schleusingen.js7. Abhängigkeiten
cwebpCLI-Tool (Google libwebp) zum Konvertieren8. Sicherheitsrelevante Aspekte
immutableist sicher für statische Assets9. Rollback-Strategie
Nächster Schritt: Übergabe an Implementierungs-Agent (Phase 2)