From be5fb32a4a2f6071c8f05e01921ad88fd78bc7a9 Mon Sep 17 00:00:00 2001 From: Nick Szaunig Date: Sun, 13 Sep 2026 23:16:35 +0200 Subject: [PATCH] perf: Admin-Bildvorschauen ueber next/image statt als rohes 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. --- src/components/admin-image-field.tsx | 12 ++++++++++-- src/components/admin-image-list-field.tsx | 10 ++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/components/admin-image-field.tsx b/src/components/admin-image-field.tsx index 3881c82..8382399 100644 --- a/src/components/admin-image-field.tsx +++ b/src/components/admin-image-field.tsx @@ -1,5 +1,6 @@ "use client"; +import Image from "next/image"; import { useRef, useState, type ChangeEvent } from "react"; import { useI18n } from "@/i18n/i18n-provider"; @@ -56,8 +57,15 @@ export function AdminImageField({ name, label, initialValue }: AdminImageFieldPr
{value ? ( - // eslint-disable-next-line @next/next/no-img-element -- kleine Admin-Vorschau, next/image lohnt hier nicht. - + // Ueber next/image statt als rohes : gespeichert wird ein Bild + // mit bis zu MAX_IMAGE_DIMENSION Kantenlaenge (siehe lib/uploads.ts), + // also durchaus ein paar hundert KB. Als rohes laedt die + // Admin-Seite dieses Vollbild fuer eine 80x80-Kachel — bei einem + // Formular mit mehreren Bildern summiert sich das spuerbar. Der + // Optimierer liefert stattdessen genau die gebrauchte Groesse. +
+ +
) : (
{t.adminImageField.none} diff --git a/src/components/admin-image-list-field.tsx b/src/components/admin-image-list-field.tsx index 5d1d2b3..fff0d13 100644 --- a/src/components/admin-image-list-field.tsx +++ b/src/components/admin-image-list-field.tsx @@ -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
{images.map((src, i) => (
- {/* eslint-disable-next-line @next/next/no-img-element -- kleine Admin-Vorschau, next/image lohnt hier nicht. */} - + {/* Ueber next/image statt als rohes — 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. */} +
+ +