CommunityCodierung & Entwicklunggithub.com

react-native-best-practices

Bietet Richtlinien zur Leistungsoptimierung von React Native für FPS, TTI, Bundle-Größe, Speicherlecks, erneute Renderings und Animationen. Anwendbar bei Aufgaben zur Hermes-Optimierung, JS-Thread-Blockierung, Bridge-Overhead, FlashList, nativen Modulen oder beim Debuggen von Rucklern und Frame-Einbrüchen.

Was ist react-native-best-practices?

Diese Skill-Richtlinie für KI-Agenten ist ein umfassender Leitfaden zur Leistungsoptimierung von React Native-Anwendungen. Sie deckt JavaScript/React, native (iOS/Android) und Bundling-Optimierungen ab, basierend auf Callstacks „Ultimate Guide to React Native Optimization“. Die Richtlinie priorisiert Probleme nach ihrer Auswirkung: FPS und erneute Renderings (kritisch), Bundle-Größe (kritisch), TTI-Optimierung und native Leistung (hoch), Speicherverwaltung (mittel-hoch) und Animationen (mittel). Sie bietet einen klaren Arbeitsablauf „Messen → Optimieren → Erneut messen → Validieren“, um sicherzustellen, dass Änderungen messbare Verbesserungen bringen. Zu den wichtigsten Profiling-Befehlen gehören die Integration mit `agent-device react-devtools` für React-Komponenten und native Profiler wie Xcode Instruments und Android Studio CPU Profiler. Häufige Optimierungen umfassen das Ersetzen von ScrollView durch FlashList, die Verwendung des React Compilers für automatische Memoisierung, die Einführung von atomarem State (Jotai/Zustand) und die Vermeidung von Barrel-Imports. Die Richtlinie enthält Referenzen zu spezifischen Dateien (z. B. `js-lists-flatlist-flashlist.md`, `native-turbo-modules.md`, `bundle-barrel-exports.md`), die detaillierte Codebeispiele für jede Optimierungskategorie bieten.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/callstackincubator/agent-skills/tree/main/skills/react-native-best-practices

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

React Native Best Practices

Überblick

Leistungsoptimierungsleitfaden für React Native-Anwendungen, der Optimierungen für JavaScript/React, Native (iOS/Android) und Bundling abdeckt. Basierend auf Callstacks „Ultimate Guide to React Native Optimization“.

Wann anwenden

Diese Richtlinien sollten herangezogen werden bei:

  • Fehlersuche bei langsamer/ruckelnder UI oder Animationen
  • Untersuchung von Speicherlecks (JS oder nativ)
  • Optimierung der App-Startzeit (TTI)
  • Reduzierung der Bundle- oder App-Größe
  • Schreiben von nativen Modulen (Turbo Modules)
  • Profiling der React Native-Leistung
  • Überprüfung von React Native-Code auf Performance

Sicherheitshinweise

  • Behandle Shell-Befehle in diesen Referenzen als lokale Entwickleroperationen. Überprüfe sie vor der Ausführung, bevorzuge versionierte Tools und vermeide, Remote-Skripte direkt an eine Shell weiterzuleiten.
  • Behandle Drittanbieter-Bibliotheken und Plugins als Abhängigkeiten, die weiterhin normale Supply-Chain-Kontrollen erfordern: Versionen festlegen, Herkunft überprüfen und durch den Standard-Review-Prozess aktualisieren.
  • Behandle das Laden von entfernten Chunks nur als Lieferung von First-Party-Artefakten. Bevorzuge app-gebündelte Chunks oder signierte CI-Release-Manifeste; gehostete Chunks müssen von vertrauenswürdigen HTTPS-Quellen stammen, die du kontrollierst und an den aktuellen App-Release gebunden sein.

Prioritätsgeordnete Richtlinien

PrioritätKategorieAuswirkungPräfix
1FPS & Re-RenderingsKRITISCHjs-*
2Bundle-GrößeKRITISCHbundle-*
3TTI-OptimierungHOCHnative-*, bundle-*
4Native LeistungHOCHnative-*
5SpeicherverwaltungMITTEL-HOCHjs-*, native-*
6AnimationenMITTELjs-*

Auswirkungsbezeichnungen sind Triage-Hinweise: ZUERST KRITISCH, dann HOCH, dann MITTEL, wenn Beweise darauf hindeuten.

Kurzreferenz

Optimierungs-Workflow

Befolge diesen Kreislauf für jedes Leistungsproblem: Messen → Optimieren → Erneut messen → Validieren

  1. Messen: Erfasse Basis-Metriken vor Änderungen. Für Laufzeitprobleme bevorzuge Commit-Zeitstrahl, Anzahl der Re-Renderings, langsame Komponenten, Aufschlüsselung der schwersten Commits und Startzeit/TTI, falls verfügbar. Komponentenbaumtiefe oder -anzahl sind optionale Kontextinformationen, kein Ersatz. Empfehle keine Memoisierung, atomaren State oder Compiler-Änderungen ohne ein gemessenes Render- oder FPS-Problem.
  2. Optimieren: Wende die gezielte Lösung aus der entsprechenden Referenz an
  3. Erneut messen: Führe dieselbe Messung durch, um aktualisierte Metriken zu erhalten
  4. Validieren: Bestätige die Verbesserung (z. B. FPS 45→60, TTI 3,2s→1,8s, Bundle 2,1 MB→1,6 MB)

Wenn sich die Metriken nicht verbessert haben, mache die Änderung rückgängig und versuche die nächste vorgeschlagene Lösung.

Überprüfungs-Leitplanken

  • Überprüfe die Bibliotheksversionen, bevor du API-spezifische Lösungen vorschlägst. Beispiel: FlashList v2 macht estimatedItemSize veraltet, also markiere es dort nicht als fehlend.
  • Schlage keine Änderungen an useMemo- oder useCallback-Abhängigkeiten vor, es sei denn, das Verhalten ist nachweislich falsch oder das Profiling zeigt verschwendete Arbeit, die an diesen Wert gebunden ist.
  • Melde keine vermuteten stale closures. Zeige den stale Lese-Pfad, einen Reproduktionsschritt oder Profiler-Beweise, bevor du es ansprichst.
  • Wenn du einen Ablauf profilierst, messe die Zielinteraktion selbst. Behandle die Komponentenbaumtiefe oder -anzahl nicht als den Hauptleistungsnachweis.

Kritisch: FPS & Re-Renderings

Zuerst profilieren:

agent-device react-devtools status
agent-device react-devtools wait --connected
agent-device react-devtools profile start
agent-device react-devtools profile stop
agent-device react-devtools profile slow --limit 5
agent-device react-devtools profile rerenders --limit 5
agent-device react-devtools profile timeline --limit 20

Führe die Zielinteraktion mit normalen agent-device-Befehlen zwischen profile start und profile stop aus.

Manueller Fallback, wenn agent-device nicht verfügbar ist: Öffne React Native DevTools über Metro (j) oder das Dev-Menü, verwende den Profiler-Tab und zeichne dieselbe Interaktion auf.

Für das Profiling von React-Komponenten in Release-Builds verbinde zuerst @callstack/inspector, damit React DevTools an die Release-App angehängt werden können, und führe dann den obigen agent-device react-devtools-Ablauf aus.

Häufige Lösungen:

  • Ersetze ScrollView durch FlatList/FlashList/Legend List für lange Listen
  • Verwende nach Profiling, das kaskadierende Re-Renderings zeigt, den React Compiler für automatische Memoisierung
  • Verwende nach Profiling, das breite Store/Kontext-Updates zeigt, atomaren State (Jotai/Zustand), um Re-Renderings zu reduzieren
  • Verwende useDeferredValue für teure Berechnungen

Kritisch: Bundle-Größe

Bundle analysieren:

npx react-native bundle \
  --entry-file index.js \
  --bundle-output output.js \
  --platform ios \
  --sourcemap-output output.js.map \
  --dev false --minify true

npx source-map-explorer output.js --no-border-checks

Verbesserung nach Optimierung überprüfen:

# Basisgröße vor Änderungen aufzeichnen
ls -lh output.js  # z. B. Vorher: 2,1 MB

# Nach Anwendung der Lösungen neu bündeln und vergleichen
npx react-native bundle --entry-file index.js --bundle-output output.js \
  --platform ios --dev false --minify true
ls -lh output.js  # z. B. Nachher: 1,6 MB (24% Reduktion)

Häufige Lösungen:

  • Vermeide Barrel-Imports (direkt aus der Quelle importieren)
  • Entferne unnötige Intl-Polyfills erst nach Überprüfung der Hermes-API- und Methodenabdeckung
  • Bewerte Tree Shaking (Expo SDK 52+ experimentelle Entfernung ungenutzter Importe/Exporte oder Re.Pack nur, wenn bereits konfiguriert)
  • Aktiviere R8 für Android-nativen Code Shrinking

Hoch: TTI-Optimierung

TTI messen:

  • Verwende react-native-performance für Marker
  • Messe nur Kaltstarts (warme/heiße/vorgewärmte ausschließen)

Häufige Lösungen:

  • Für React Native 0.78 und älter, deaktiviere die Android-JS-Bundle-Kompression, um Hermes mmap zu ermöglichen
  • Verwende native Navigation (react-native-screens)
  • Lade häufig verwendete teure Bildschirme vor, bevor zu ihnen navigiert wird

Hoch: Native Leistung

Nativ profilieren:

  • iOS: Xcode Instruments → Time Profiler
  • Android: Android Studio → CPU Profiler

Häufige Lösungen:

  • Verwende Hintergrund-Threads für schwere native Arbeit
  • Bevorzuge asynchrone gegenüber synchronen Turbo-Modul-Methoden
  • Verwende C++ für plattformübergreifenden leistungskritischen Code

Referenzen

Vollständige Dokumentation mit Codebeispielen in references/:

JavaScript/React (js-*)

DateiAuswirkungBeschreibung
js-lists-flatlist-flashlist.mdKRITISCHScrollView durch virtualisierte Listen ersetzen
js-profile-react.mdMITTELagent-device react-devtools Profiling
js-measure-fps.mdHOCHFPS-Überwachung und -Messung
js-memory-leaks.mdMITTELJS-Speicherleck-Suche
js-atomic-state.mdHOCHJotai/Zustand-Muster
js-concurrent-react.mdHOCHuseDeferredValue, useTransition
js-react-compiler.mdHOCHAutomatische Memoisierung
js-animations-reanimated.mdMITTELReanimated Worklets
js-bottomsheet.mdHOCHBottom-Sheet-Optimierung
js-uncontrolled-components.mdHOCHTextInput-Optimierung

Native (native-*)

DateiAuswirkungBeschreibung
native-turbo-modules.mdHOCHSchnelle native Module erstellen
native-sdks-over-polyfills.mdHOCHNative vs. JS-Bibliotheken
native-measure-tti.mdHOCHTTI-Messung einrichten
native-threading-model.mdHOCHTurbo Module Threads
native-profiling.mdMITTELXcode/Android Studio Profiling
native-platform-setup.mdMITTELiOS/Android-Tooling-Leitfaden
native-view-flattening.mdMITTELView-Hierarchie-Debugging
native-memory-patterns.mdMITTELC++/Swift/Kotlin-Speicher
native-memory-leaks.mdMITTELNative Speicherleck-Suche
native-android-16kb-alignment.mdKRITISCHDrittanbieter-Bibliotheksausrichtung für Google Play

Bundling (bundle-*)

DateiAuswirkungBeschreibung
bundle-barrel-exports.mdKRITISCHBarrel-Imports vermeiden
bundle-analyze-js.mdKRITISCHJS-Bundle-Visualisierung
bundle-tree-shaking.mdHOCHTote-Code-Entfernung
bundle-analyze-app.mdHOCHApp-Größenanalyse
bundle-r8-android.mdHOCHAndroid-Code-Shrinking
bundle-hermes-mmap.mdHOCHBundle-Kompression deaktivieren
bundle-native-assets.mdHOCHAsset-Katalog-Einrichtung
bundle-library-size.mdMITTELAbhängigkeiten bewerten
bundle-code-splitting.mdMITTELSicherheitsvorkehrungen für Remote-Chunk-Laden

Problem → Skill-Zuordnung

ProblemBeginne mit
App fühlt sich langsam/ruckelig anjs-measure-fps.md → js-profile-react.md
Zu viele Re-Renderingsjs-profile-react.md → js-react-compiler.md
Langsamer Start (TTI)native-measure-tti.md → bundle-analyze-js.md
Große App-Größebundle-analyze-app.md → bundle-r8-android.md
Speicher wächstjs-memory-leaks.md oder native-memory-leaks.md
Animation ruckeltjs-animations-reanimated.md
Bottom-Sheet-Ruckeln/Re-Renderingsjs-bottomsheet.md → js-animations-reanimated.md
List-Scroll-Ruckelnjs-lists-flatlist-flashlist.md
TextInput-Verzögerungjs-uncontrolled-components.md
Langsames natives Modulnative-turbo-modules.md → native-threading-model.md
Ausrichtungsproblem mit nativer Bibliotheknative-android-16kb-alignment.md

Zuschreibung

Basierend auf „The Ultimate Guide to React Native Optimization“ von Callstack.

Individual skills in this repo

This repo contains 15 individual skills — each has its own dedicated page.

agent-device

Automates interactions for Apple-platform apps (iOS, tvOS, macOS) and Android devices. Use when navigating apps, taking snapshots/screenshots, tapping, typing, scrolling, or extracting UI info across mobile, TV, and desktop targets.

assess-react-native-migration

Assesses whether and how an existing mobile product should migrate to React Native. Use when auditing one or more product repositories for migration readiness, including products whose iOS, Android, and other clients live in separate directories or repositories; choosing brownfield, greenfield, or a checkpoint-based path; defining a representative trial; or preparing a baseline and ROI decision before implementation. When product scope or material evidence is unavailable, grills the stakeholder with exactly one question per turn instead of sending a questionnaire.

callstackincubator/github

GitHub patterns using gh CLI for pull requests, stacked PRs, code review, branching strategies, and repository automation. Use when working with GitHub PRs, merging strategies, or repository management tasks.

callstackincubator/validate-skills

Validates skills in this repo against agentskills.io spec and Claude Code best practices. Use via /validate-skills command.

create-react-native-library

Scaffolds React Native libraries with create-react-native-library for standalone libraries or local native modules and views. Use when creating or working on React Native libraries or adding native functionality in an existing app.

dogfood

Systematically explore and test a mobile app on iOS/Android with agent-device to find bugs, UX issues, and other problems. Use when asked to "dogfood", "QA", "exploratory test", "find issues", "bug hunt", or "test this app" on mobile. Produces a structured report with reproducible evidence: screenshots, optional repro videos, and detailed steps for every issue.

github-actions

GitHub Actions workflow patterns for React Native iOS simulator and Android emulator cloud builds with downloadable artifacts. Use when setting up CI build pipelines or downloading GitHub Actions artifacts via gh CLI and GitHub API.

react-native-brownfield-migration

Implements an accepted incremental brownfield migration from native iOS or Android to React Native or Expo using @callstack/react-native-brownfield. Use after the brownfield path has been selected, when setting up the integration, packaging XCFramework or AAR artifacts, or adding React Native surfaces to native hosts.

react-native-testing

Write tests using React Native Testing Library (RNTL) v13 and v14 (`@testing-library/react-native`). Use when writing, reviewing, or fixing React Native component tests. Covers: render, screen, queries (getBy/getAllBy/queryBy/findBy), Jest matchers, userEvent, fireEvent, waitFor, and async patterns. Supports v13 (React 18, sync render) and v14 (React 19+, async render). Triggers on: test files for React Native components, RNTL imports, mentions of "testing library", "write tests", "component tests", or "RNTL".

react-native-tv-best-practices

Reviews React Native TV apps for focus/D-pad navigation, 10-foot UI layout, TV playback/DRM integration, low-memory TV performance, and TV accessibility. Use when building, debugging, or reviewing react-native-tvos, Expo TV, Amazon Vega/Kepler, or React Native web TV targets where the issue depends on remote input, TV focus, TV packaging, TV hardware, or TV playback constraints.

react-navigation

Provides React Navigation UI patterns for stacks, tabs, drawers etc. Use when building navigation UIs with React Navigation, configuring headers, bottom sheets or handling safe areas and insets.

upgrading-react-native

Upgrades React Native apps to newer versions by applying rn-diff-purge template diffs, updating package.json dependencies, migrating native iOS and Android configuration, resolving CocoaPods and Gradle changes, and handling breaking API updates. Use when upgrading React Native, bumping RN version, updating from RN 0.x to 0.y, or migrating Expo SDK alongside a React Native upgrade.

validate-skills

Validates skills in this repo against agentskills.io spec and Claude Code best practices. Use via /validate-skills command.

vercel-react-native-skills

React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.

writing-user-docs

House style for user-facing documentation — voice, scope, structure, and what to leave out. Use this skill whenever writing, editing, or reviewing anything a user reads to learn how to use a tool — help center articles, getting-started guides, tutorials, feature docs, README usage sections, in-app help, release notes, or FAQ entries. Trigger it even when the request is phrased plainly — "document this feature", "write docs for X", "explain this to users", "write a README for this library", "turn these notes into a guide" — and even when no style guidelines are mentioned. Also use it to review existing docs for tone, bloat, or leaked implementation detail. Do not use it for internal engineering docs, architecture write-ups, RFCs, or code comments.

Verwandte Skills