Bild-Caching-Strategien mit FastImage optimieren
AI generated
RN
native
React Native / Performance
Bild-Caching-Strategien
Mit FastImage optimieren, wenn die Standard-Image-Komponente an ihre Grenzen stößt

Eine Produktliste mit hundert Vorschaubildern oder ein Feed mit hochauflösenden Fotos bringt die eingebaute Image-Komponente von React Native schnell an ihre Grenzen, weil ihr aggressives Caching fehlt. FastImage schließt diese Lücke mit nativer Disk- und Memory-Caching-Logik. Dieser Artikel zeigt die Grenzen der Standard-Komponente und die praktische Konfiguration von FastImage.

9 Min. Lesezeit FastImage Bild-Caching

1. Grenzen der eingebauten Image-Komponente

Die Standard-Image-Komponente von React Native nutzt auf iOS und Android jeweils unterschiedliche, recht einfache Caching-Mechanismen, die sich kaum konfigurieren lassen. Auf iOS greift sie auf den systemweiten URL-Cache zurück, der von zahlreichen anderen Anfragen der App mitgenutzt wird und daher wenig Kontrolle über die tatsächliche Verweildauer eines konkreten Bildes im Cache erlaubt.

In der Praxis führt das dazu, dass Bilder in langen Listen, etwa einem Produktkatalog oder einem Social-Media-Feed, beim erneuten Scrollen sichtbar nachladen, obwohl sie kurz zuvor bereits einmal angezeigt wurden. Für einzelne Bilder in einfachen Screens ist das unproblematisch, bei umfangreichen Bildergalerien wirkt es sich jedoch direkt auf die wahrgenommene Performance der App aus.

2. Wie FastImage das Caching-Problem löst

FastImage ersetzt die native Bildladelogik durch SDWebImage auf iOS und Glide auf Android, zwei etablierte, spezialisierte Bibliotheken, die von Haus aus einen zweistufigen Cache mit In-Memory- und Disk-Ebene mitbringen. Ein Bild, das bereits einmal geladen wurde, lässt sich beim erneuten Rendern ohne erneute Netzwerkanfrage sofort aus dem Speicher oder von der Festplatte anzeigen.

Zusätzlich dedupliziert FastImage parallele Anfragen für dieselbe Bild-URL automatisch: Fordern mehrere gleichzeitig gerenderte Listeneinträge dasselbe Bild an, wird nur eine einzige Netzwerkanfrage tatsächlich abgesetzt, während alle wartenden Komponenten das Ergebnis derselben Anfrage erhalten, sobald sie eintrifft.


import FastImage from 'react-native-fast-image';

function ProductThumbnail({ uri }: { uri: string }) {
  return (
    <FastImage
      style={{ width: 120, height: 120, borderRadius: 8 }}
      source={{
        uri,
        priority: FastImage.priority.normal,
        cache: FastImage.cacheControl.immutable,
      }}
      resizeMode={FastImage.resizeMode.cover}
    />
  );
}

3. Cache-Control-Strategien im Detail

FastImage bietet drei Cache-Control-Modi, die genau steuern, wie mit HTTP-Cache-Headern umgegangen wird. Der Modus immutable geht davon aus, dass sich ein Bild unter derselben URL niemals ändert, was ideal für Produktbilder mit eindeutigen, versionierten Dateinamen ist, und liefert die höchste Cache-Trefferquote ohne jede erneute Header-Prüfung.

Der Modus web respektiert die vom Server gesendeten Cache-Control- und Expires-Header vollständig, was sich für Inhalte eignet, die sich gelegentlich ändern können, etwa Nutzer-Avatare. Der Modus cacheOnly verhindert jede Netzwerkanfrage und liefert ausschließlich bereits zwischengespeicherte Bilder, was sich für Offline-Ansichten eignet, bei denen kein erneuter Download gewünscht ist.

4. Priorisierung in langen Listen und Feeds

Über die priority-Eigenschaft lässt sich steuern, welche Bilder bevorzugt geladen werden, wenn viele Anfragen gleichzeitig anstehen, etwa beim schnellen Scrollen durch eine FlatList. Sichtbare Bilder im aktuellen Viewport sollten die Priorität high erhalten, während Bilder außerhalb des sichtbaren Bereichs, die nur vorab geladen werden, mit low priorisiert werden können.

Diese Priorisierung reduziert spürbar die Zeit bis zum sichtbaren Bild, weil die native Lade-Queue die dringenderen Anfragen zuerst abarbeitet, statt alle Bilder in der Reihenfolge ihres Renderns strikt nacheinander zu laden. Bei sehr langen Listen empfiehlt sich zusätzlich, Bilder weit außerhalb des sichtbaren Bereichs überhaupt nicht vorab zu laden, um unnötigen Netzwerk- und Speicherverbrauch zu vermeiden.

5. Preloading für bessere wahrgenommene Performance

FastImage stellt eine statische preload-Methode bereit, mit der sich eine Liste von Bild-URLs gezielt im Voraus laden lässt, bevor die entsprechenden Komponenten überhaupt gerendert werden. Das eignet sich besonders für den nächsten Schritt in einem bekannten Nutzerfluss, etwa das Vorladen von Detailbildern, sobald eine Produktliste angezeigt wird.

Wichtig ist, Preloading gezielt und begrenzt einzusetzen, statt pauschal alle Bilder einer Anwendung im Hintergrund zu laden. Unkontrolliertes Preloading kann den verfügbaren Netzwerk-Durchsatz für die tatsächlich sichtbaren Inhalte blockieren und den Speicherverbrauch der App unnötig in die Höhe treiben.


// Nächste Detailbilder vorladen, sobald die Liste sichtbar wird
useEffect(() => {
  const preloadTargets = products.slice(0, 5).map((p) => ({ uri: p.detailImageUrl }));
  FastImage.preload(preloadTargets);
}, [products]);

6. Speicherverbrauch und Cache-Limits kontrollieren

Ein aggressiver Bild-Cache kann bei unbegrenzter Größe selbst zu einem Performance-Problem werden, insbesondere auf älteren Geräten mit wenig Arbeitsspeicher. FastImage überlässt die konkreten Größenlimits weitgehend den nativen Bibliotheken SDWebImage und Glide, die beide sinnvolle Standardwerte mitbringen, sich aber bei Bedarf über native Konfiguration feiner anpassen lassen.

In der Praxis reicht es meist, die Standardwerte zu belassen und stattdessen die Bildgröße selbst zu kontrollieren: Ein Vorschaubild sollte nicht in der vollen Auflösung des Originals geladen werden, sondern über einen Bildserver oder eine CDN-Transformation bereits passend skaliert ankommen, um den Cache nicht unnötig mit überdimensionierten Daten zu füllen. Diese Kontrolle an der Quelle spart sowohl Speicherplatz auf dem Gerät als auch Netzwerkvolumen beim erstmaligen Laden.

7. Cache-Invalidierung und manuelles Löschen

Für Fälle, in denen sich ein Bild unter derselben URL tatsächlich ändert, etwa ein aktualisiertes Nutzer-Profilbild, reicht der immutable-Modus nicht aus, weil er genau diese Änderung ignoriert. Hier empfiehlt sich entweder ein Cache-Busting-Parameter in der URL oder ein expliziter Aufruf von FastImage.clearMemoryCache und FastImage.clearDiskCache nach einem erfolgreichen Upload.

Ein vollständiges Zurücksetzen des Caches sollte sparsam eingesetzt werden, da es sämtliche zuvor zwischengespeicherten Bilder verwirft und damit kurzfristig wieder erhöhten Netzwerkverkehr erzeugt. Für punktuelle Änderungen ist ein Cache-Busting-Parameter, der nur die betroffene URL betrifft, in der Regel die gezieltere und ressourcenschonendere Lösung.

8. FastImage sinnvoll mit FlatList und FlashList kombinieren

In Kombination mit einer FlatList oder der performanteren FlashList entfaltet FastImage seinen größten Nutzen, weil beim schnellen Scrollen viele Bildkomponenten gleichzeitig gemountet und wieder entfernt werden. Ohne einen Disk-Cache müsste jedes erneut sichtbare Bild komplett neu vom Netzwerk geladen werden, was bei schnellem Scrollen zu sichtbarem Nachladen führt.

Zusätzlich empfiehlt sich, die getItemLayout-Eigenschaft der Liste zu setzen, wenn die Bildgrößen im Voraus bekannt sind, damit die Liste selbst effizienter rendert und FastImage nicht durch häufiges Neu-Layouten zusätzliche, unnötige Ladezyklen auslöst.

9. Wann die Standard-Image-Komponente tatsächlich ausreicht

Nicht jede App braucht FastImage: Bei wenigen, statischen Bildern pro Screen, etwa einem Logo oder einem einzelnen Hero-Bild, bringt die native Bildladelogik von React Native meist keinen spürbaren Nachteil, und die zusätzliche native Abhängigkeit lohnt sich in solchen Fällen kaum.

Sobald jedoch mehr als eine Handvoll Netzwerkbilder gleichzeitig sichtbar sind, sich Nutzer häufig zwischen Ansichten mit denselben Bildern hin und her bewegen oder eine scrollbare Liste mit Vorschaubildern im Mittelpunkt der App steht, überwiegt der Nutzen von FastImage die zusätzliche Komplexität deutlich. Eine pragmatische Faustregel ist, mit der Standard-Komponente zu starten und erst dann auf FastImage umzusteigen, sobald ein konkretes, messbares Nachlade-Problem in einer Liste oder einem Feed auftritt, statt die zusätzliche native Abhängigkeit vorsorglich in jedes Projekt aufzunehmen.

Cache-Modus Verhalten Typischer Einsatzzweck Wichtigste Einschränkung
immutable Ignoriert HTTP-Cache-Header, maximale Trefferquote Produktbilder mit versionierten, eindeutigen URLs Änderungen unter derselben URL werden nicht erkannt
web Respektiert Cache-Control- und Expires-Header Inhalte, die sich gelegentlich ändern, z. B. Avatare Cache-Trefferquote hängt von Server-Headern ab
cacheOnly Keine Netzwerkanfrage, nur bereits gecachte Bilder Offline-Ansichten ohne erneuten Download Neue, noch nicht gecachte Bilder bleiben unsichtbar
priority.high Bevorzugte Abarbeitung in der Lade-Queue Sichtbare Bilder im aktuellen Viewport Zu viele hochpriorisierte Anfragen heben den Effekt auf
priority.low Nachrangige Abarbeitung in der Lade-Queue Vorgeladene Bilder außerhalb des sichtbaren Bereichs Kann bei schwacher Verbindung deutlich verzögert werden

Mironsoft

React-Native-App-Entwicklung und Magento-Anbindung

Eine mobile App zum Magento-Shop, die wirklich rund läuft?

Wir entwickeln React-Native-Apps, die sauber an die Magento REST- oder GraphQL-API angebunden sind, von der ersten Codezeile bis zur Veröffentlichung im App Store und bei Google Play.

App-Konzeption

Architektur und Feature-Umfang einer Magento-angebundenen App gemeinsam planen.

Magento-API-Integration

Produktkatalog, Warenkorb und Checkout sauber an die Shop-API anbinden.

Store-Veröffentlichung

App Store- und Google-Play-Freigabeprozess ohne Stolperfallen begleiten.

10. Zusammenfassung

Bild-Caching mit FastImage: Das Wichtigste auf einen Blick

Standard-Komponente hat Grenzen

Die eingebaute Image-Komponente bietet kaum konfigurierbares Caching und führt bei langen Listen zu sichtbarem Nachladen.

FastImage nutzt SDWebImage und Glide

Zweistufiger Memory- und Disk-Cache sowie automatische Deduplizierung paralleler Anfragen für dieselbe URL.

Priorität und Cache-Modus gezielt setzen

Sichtbare Bilder erhalten hohe Priorität, versionierte URLs profitieren vom immutable-Cache-Modus.

Preloading sparsam einsetzen

Gezieltes Vorladen für den nächsten Nutzerschritt lohnt sich, unkontrolliertes Preloading blockiert Netzwerk und Speicher.

11. FAQ: Bild-Caching mit FastImage: Das Wichtigste auf einen Blick

1Warum reicht die Standard-Image-Komponente von React Native oft nicht aus?
Weil ihr Caching auf iOS und Android jeweils unterschiedlich und kaum konfigurierbar ist, was bei langen Listen mit vielen Bildern zu sichtbarem Nachladen beim erneuten Scrollen führt.
2Welche nativen Bibliotheken nutzt FastImage im Hintergrund?
Auf iOS SDWebImage, auf Android Glide, beide etablierte Bibliotheken mit eingebautem zweistufigem Memory- und Disk-Cache.
3Was bedeutet der Cache-Modus immutable?
Er geht davon aus, dass sich ein Bild unter derselben URL niemals ändert, und liefert dadurch die höchste Cache-Trefferquote, eignet sich aber nur für Bilder mit eindeutigen, versionierten URLs.
4Wie funktioniert die Deduplizierung paralleler Bildanfragen?
Fordern mehrere gleichzeitig gerenderte Komponenten dieselbe Bild-URL an, setzt FastImage nur eine einzige Netzwerkanfrage ab und verteilt das Ergebnis an alle wartenden Komponenten.
5Wann sollte man priority.high statt priority.normal verwenden?
Für Bilder, die im aktuellen sichtbaren Viewport stehen, damit die native Lade-Queue sie bevorzugt vor nicht sichtbaren, vorgeladenen Bildern abarbeitet.
6Wie geht man mit Bildern um, die sich unter derselben URL ändern?
Der immutable-Modus ignoriert solche Änderungen. Besser eignet sich ein Cache-Busting-Parameter in der URL oder ein expliziter Aufruf von clearMemoryCache und clearDiskCache.
7Ist unbegrenztes Preloading empfehlenswert?
Nein, unkontrolliertes Preloading kann Netzwerk-Durchsatz für tatsächlich sichtbare Inhalte blockieren und den Speicherverbrauch der App unnötig erhöhen.
8Braucht jede React-Native-App FastImage?
Nein, bei wenigen statischen Bildern pro Screen bringt die Standard-Komponente meist keinen spürbaren Nachteil. FastImage lohnt sich vor allem bei umfangreichen Bildergalerien und Feeds.
9Wie lässt sich der Bild-Cache vollständig zurücksetzen?
Über die statischen Methoden clearMemoryCache und clearDiskCache, die aber sparsam eingesetzt werden sollten, da sie sämtliche gecachten Bilder verwerfen.
10Wie sollte FastImage mit FlatList oder FlashList kombiniert werden?
Idealerweise zusammen mit einer korrekt gesetzten getItemLayout-Eigenschaft, damit die Liste effizient rendert und FastImage nicht durch häufiges Neu-Layouten unnötige Ladezyklen auslöst.