Bildoptimierung: WebP + Lazy Loading + Caching #17
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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)