Hirefullstack – Software Engineering & IT-Beratung aus Berlin
← Zur Übersicht
Einstieg 9 Min Lesezeit

Bilder & Schriften

Zwei Komponenten, die den größten Teil der Ladezeit sparen

In einem Satz

next/image regelt Größe, Format und Ladezeitpunkt von Bildern. next/font lädt Schriften beim Bauen mit. Beides ist wenig Aufwand für viel Wirkung.

Wenn eine Seite langsam ist, liegt es selten am JavaScript. Meistens sind es zu große Bilder und nachgeladene Schriften. Für beides bringt Next.js eine fertige Lösung mit.

Bilder

bild.tsx
import Image from "next/image";
import titelbild from "./titelbild.jpg";

// Importiertes Bild: Größe kennt Next.js selbst
<Image src={titelbild} alt="Blick über Berlin" priority />

// Aus dem Netz: Größe angeben, sonst springt das Layout
<Image
  src="https://cdn.beispiel.de/foto.jpg"
  alt="Produktfoto"
  width={800}
  height={600}
/>

next/imageDie Bildkomponente, die Größe, Format und Ladeverhalten selbst regelt und damit den größten Teil der Ladezeit spart. liefert automatisch ein modernes Format aus, skaliert auf die tatsächlich benötigte Größe und lädt erst, wenn das Bild in die Nähe des sichtbaren Bereichs kommt.

Stolperstein alt und Größe sind nicht optional

Ohne alt ist das Bild für Screenreader unsichtbar – und Next.js meckert zu Recht. Ohne Breite und Höhe kennt der Browser den Platzbedarf nicht, und die Seite springt beim Nachladen. Bei importierten Bildern erledigt sich das von selbst.

priority.tsx
// Das große Bild ganz oben: sofort laden, nicht verzögert
<Image src={held} alt="…" priority />

// Alles Weitere: Standard, also verzögert – genau richtig
priority genau einmal pro Seite setzen: für das Bild, das ohne Scrollen sichtbar ist.
Gut zu wissen Fremde Adressen müssen freigegeben werden

Bilder von anderen Domains erlaubt Next.js erst nach einem Eintrag in next.config.js unter images.remotePatterns. Das verhindert, dass deine Seite als kostenloser Bilddienst für Fremde dient.

Schriften

app/layout.tsx
import { Inter } from "next/font/google";

const inter = Inter({
  subsets: ["latin"],
  display: "swap",
  variable: "--font-inter",
});

export default function RootLayout({ children }) {
  return (
    <html lang="de" className={inter.variable}>
      <body>{children}</body>
    </html>
  );
}

next/fontLädt Schriften beim Bauen mit aus und legt sie neben deinen Code – kein Nachladen von Google, kein Textsprung. lädt die Schrift beim Bauen herunter und legt sie neben deinen Code. Zur Laufzeit geht keine Anfrage mehr an Google – das spart eine Verbindung und erspart dir die datenschutzrechtliche Diskussion gleich mit.

Schrift wird zur Laufzeit geholt
<link
  href="https://fonts.googleapis.com/css2?family=Inter"
  rel="stylesheet"
/>
Schrift liegt beim Code
import { Inter } from "next/font/google";
const inter = Inter({ subsets: ["latin"] });

Nebeneffekt: Next.js berechnet einen passenden Ersatz für die Zeit vor dem Laden, sodass der Text beim Wechsel nicht springt.

eigene-schrift.ts
import localFont from "next/font/local";

const eigene = localFont({
  src: [
    { path: "./Marke-Regular.woff2", weight: "400" },
    { path: "./Marke-Bold.woff2", weight: "700" },
  ],
  variable: "--font-marke",
});

Was das praktisch bringt

Nimm es, wenn …
  • +

    next/image für alles, was ein Foto ist

  • +

    priority für das eine große Bild oben auf der Seite

  • +

    next/font für jede Schrift – auch für eigene Dateien

Lass es, wenn …
  • <img> für Fotos – damit verschenkst du Format, Größe und Ladeverhalten

  • priority überall: dann ist wieder nichts bevorzugt

  • Schriften per <link> aus dem Netz nachladen

Tipp Für Symbole reicht ein normales img

Ein SVG-Symbol mit 2 KB profitiert von der Bildoptimierung nicht – da ist <img> oder das SVG direkt im Markup einfacher. next/image lohnt sich bei Fotos, nicht bei Vektorgrafiken.

Sitzt das schon?

4 Fragen zu dieser Lektion. Falsche Antworten landen in deiner Statistik.

Hirefullstack

Ihr braucht React-Verstärkung im Team?

Wir bauen seit Jahren React- und Next.js-Anwendungen für Kunden in ganz Deutschland – als einzelner Experte, als Verstärkung fürs Bestandsteam oder als komplettes Scrum-Team.

Projekt besprechen →