Skip to content

Bilder beim Build automatisch zu WebP optimieren#4

Merged
JohannesHoppe merged 1 commit into
mainfrom
feature/optimize-images-webp
Jul 21, 2026
Merged

Bilder beim Build automatisch zu WebP optimieren#4
JohannesHoppe merged 1 commit into
mainfrom
feature/optimize-images-webp

Conversation

@JohannesHoppe

@JohannesHoppe JohannesHoppe commented Jul 21, 2026

Copy link
Copy Markdown
Member

Warum

Die Article-Bilder werden aktuell unoptimiert ausgeliefert (z. B. ein Hero als 2000px/421 KB JPEG). Das kostet auf allen konsumierenden Sites Ladezeit — messbar in Lighthouse (LCP importierter Artikel ~3,7 s).

Beim Build werden Raster-Bilder (jpg/jpeg/png) in copyEntriesToDist per sharp zu WebP konvertiert:

  • Resize auf max. 1600px Breite (nie hochskaliert), Quality 80
  • rekursiv inkl. Unterordnern (z. B. .../buch700/foto.jpg)
  • Originale werden aus dist entfernt; SVG/GIF bleiben unangetastet
  • header.url (+ neue Maße) und alle Content-<img>-Referenzen werden auf die WebP-Variante umgeschrieben — in entry.json UND list.json
  • Die Quell-Markdowns bleiben unverändert

Verifiziert

Voll-Build gegen beide Article-Repos:

Repo vorher nachher Reduktion
angular-buch/website-articles 31,0 MB 10,4 MB 66%
angular-schule/website-articles 17,1 MB 7,9 MB 54%
  • 0 jpg/png in dist übrig, GIFs erhalten
  • Beispiel-Hero: 2000px/421 KB → 1600px/193 KB
  • entry.json + list.json referenzieren konsistent .webp mit korrigierten Maßen
  • 262 Tests grün (inkl. neuem image-optimizer.spec + angepasstem copyEntriesToDist-Test), typecheck sauber

Rollout

Nach dem Merge ziehen die Article-Repos das Submodul und bauen neu → CDN liefert WebP.

Raster images (jpg/jpeg/png) in blog/material entries are converted to resized
WebP during the build (max 1600px, quality 80), recursively including subfolders.
Originals are removed from dist; SVG/GIF are left untouched. header.url (+ its
dimensions) and all content <img> references are rewritten to the WebP variant,
so entry.json AND list.json point at the optimized files.

Every consuming site (angular.schule, angular-buch.com, agentic.schule, …) benefits
automatically. Verified against both article repos: 0 jpg/png left in dist, GIFs
preserved, ~54-66% image size reduction (e.g. a 2000px/421KB hero -> 1600px/193KB).

- shared/image-optimizer.ts (+ spec): sharp-based conversion + reference rewriting
- copyEntriesToDist: optimize + rewrite in place
- build.ts: write list.json AFTER copyEntriesToDist so it reflects WebP headers
- add sharp dependency
@JohannesHoppe
JohannesHoppe requested a review from fmalcher July 21, 2026 15:03
@JohannesHoppe

Copy link
Copy Markdown
Member Author

Ich merge das einfach mal, entweder es funktioniert oder halt nicht. 😅

@JohannesHoppe
JohannesHoppe merged commit 1dc60b1 into main Jul 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant