perf: Admin-Bildvorschauen ueber next/image statt als rohes <img>
Docker Image bauen und veroeffentlichen / build-and-push (push) Successful in 2m24s

Die Vorschaukacheln in admin/inhalte, admin/produkte und admin/ernten
luden das vollstaendig gespeicherte Bild, um es auf 80x80 bzw. in einer
Vierer-Rasterkachel darzustellen. Bei einem Produktformular mit mehreren
Bildern summierte sich das zu mehreren Megabyte allein fuer Miniaturen.

Der urspruengliche Kommentar ("next/image lohnt hier nicht") stimmte, als
Uploads klein waren; gespeichert wird inzwischen bis MAX_IMAGE_DIMENSION
Kantenlaenge. Beide Felder rendern die Vorschau jetzt ueber next/image
mit passendem sizes, der Optimierer liefert damit genau die gebrauchte
Groesse. Layout und Bedienung bleiben unveraendert.
This commit is contained in:
Nick Szaunig committed 2026-09-13 23:16:35 +02:00
1 parent cd8e307faf
commit be5fb32a4a
2 files changed
+18 -4

No files matched your search

+8 -2
View File
@@ -1,5 +1,6 @@
"use client";
import Image from "next/image";
import { useRef, useState, type ChangeEvent } from "react";
import { useI18n } from "@/i18n/i18n-provider";
@@ -67,8 +68,13 @@ export function AdminImageListField({ name, label, initialValues }: AdminImageLi
<div className="mt-2 grid grid-cols-4 gap-3">
{images.map((src, i) => (
<div key={`${i}-${src}`} className="relative">
{/* eslint-disable-next-line @next/next/no-img-element -- kleine Admin-Vorschau, next/image lohnt hier nicht. */}
<img src={src} alt="" className="aspect-square w-full object-cover border border-ink/10" />
{/* Ueber next/image statt als rohes <img> — siehe Begruendung in
admin-image-field.tsx. Hier wiegt es schwerer, weil ein
Produkt mehrere Bilder tragen kann und sonst JEDES davon in
voller Groesse fuer eine Miniatur geladen wuerde. */}
<div className="relative aspect-square w-full overflow-hidden border border-ink/10">
<Image src={src} alt="" fill sizes="160px" className="object-cover" />
</div>
<button
type="button"
onClick={() => removeAt(i)}