diff --git a/next.config.ts b/next.config.ts index ae65302..d2ab3a9 100644 --- a/next.config.ts +++ b/next.config.ts @@ -25,6 +25,43 @@ const nextConfig: NextConfig = { // werden." serverExternalPackages: ["pdfkit", "ffmpeg-static"], + images: { + // AVIF vor WebP. Next.js liefert das erste Format, das der Browser laut + // Accept-Header unterstuetzt; Browser ohne AVIF bekommen unveraendert + // WebP, ganz alte das Original. + // + // Am Hero-Bild der Startseite nachgemessen (1920x1280), mit den + // Einstellungen aus next/dist/server/image-optimizer.js — WebP q75 gegen + // AVIF q47 (Next.js skaliert die Qualitaet mit 50/80) bei effort 3: + // 640 px -43 %, 828 px -42 %, 1080 px -40 %, 1920 px -37 %. + // + // Die Kodierdauer spricht nicht dagegen: bei effort 3 lag AVIF in + // derselben Messung gleichauf oder schneller als WebP (1920 px: 60 ms + // gegen 122 ms). Die frueher hier vermutete teure Erstkodierung gibt es + // in dieser Einstellung nicht. + formats: ["image/avif", "image/webp"], + + // Ein Jahr statt der Next.js-Vorgabe von vier Wochen. Hochgeladene Bilder + // sind unveraenderlich: lib/uploads.ts legt jede Datei unter einem eigenen + // Namen ab, ein ausgetauschtes Produktbild bekommt also eine neue URL. + // Ein kurzes TTL wuerde hier nur brauchbare Ergebnisse wegwerfen. + minimumCacheTTL: 60 * 60 * 24 * 365, + + // Entspricht der Vorgabe von Next.js 16, die andere Werte bereits ablehnt + // (gegen die laufende Seite geprueft: ?q=42 antwortet mit 400) — aendert + // das Verhalten also nicht. Ausgeschrieben, damit eine spaetere + // Erweiterung der Liste eine bewusste Entscheidung ist: jeder zusaetzlich + // erlaubte Wert oeffnet einen eigenen Cache-Eintrag und eine eigene + // Kodierung je Bild, von aussen ueber die URL ausloesbar. + qualities: [75], + + // Ebenfalls die Vorgabe, ausdruecklich festgehalten: ein SVG ist ein + // Dokument, das Skripte enthalten kann — same-origin ausgeliefert waere + // das ein XSS-Vektor. Diese Zeile soll verhindern, dass der Schalter + // spaeter beilaeufig umgelegt wird. + dangerouslyAllowSVG: false, + }, + // Turbopacks Dateisystem-Caches (.next/dev/cache & .next/cache/turbopack) // kollidieren in diesem OneDrive-synchronisierten Arbeitsverzeichnis // wiederholt mit der Cloud-Synchronisierung ("Failed to open database" /