Fabric dans React Native — qu’est-ce que c’est, architecture de rendu et comment ça marche

Auteur : IT Sectr Publié le : 2026-06-04 Temps de lecture : 10 min

Fabric est un nouveau moteur de rendu React Native, entièrement réécrit en C++ et intégré avec JSI. Il a remplacé l’ancien rendu basé sur UIView et ViewManager, offrant des mises à jour synchrones de l’UI et un calcul efficace des changements via Shadow Tree. Selon Meta Engineering Blog, 2024, Fabric est un composant obligatoire de la nouvelle architecture et est disponible dans React Native 0.76+.

Points clés

  • Fabric — un nouveau moteur de rendu C++ pour React Native, remplaçant l’ancien rendu UIView.
  • Shadow Tree — un arbre immuable de nœuds permettant un calcul efficace des changements.
  • Synchronie — Fabric rend l’UI de façon synchrone, sans la file d’attente asynchrone du Bridge.
  • Vitesse — Fabric réduit le nombre de repaint et accélère le rendu de 2–3 fois.
  • Intégration — Fabric fonctionne via JSI, offrant une couche C++ unifiée pour iOS et Android.

Qu’est-ce que Fabric ?

Fabric est un nouveau système de rendu pour React Native qui a remplacé l’ancien moteur de rendu fonctionnant via Shadow Thread et Bridge. Dans l’ancienne architecture, le processus de rendu comprenait trois étapes : JavaScript calcule le Virtual DOM, Shadow Thread (Yoga) calcule la mise en page, Native Thread dessine UIView. Fabric combine toutes ces étapes en un seul pipeline C++ qui fonctionne de manière synchrone.

Le développement de Fabric a commencé en 2019 dans le cadre de l’initiative Lean Core et du projet « The New Architecture ». L’objectif principal était de résoudre les problèmes de performances liés au rendu asynchrone à trois passes. Dans l’ancienne architecture, chaque changement d’état nécessitait trois passages à travers différents threads, créant un délai entre le changement de données et le rendu de l’UI.

Fabric est basé sur le concept d’arbre fantôme immuable (Immutable Shadow Tree). Chaque nœud de l’arbre représente un composant React avec ses props et son état. Lorsque l’état change, un nouvel arbre est créé, et Fabric calcule la différence entre l’ancien et le nouvel arbre et n’applique que les changements nécessaires à l’UI native. Cela minimise le nombre d’opérations UIView/ViewGroup et réduit le temps de rendu.

Comment fonctionne Shadow Tree

Shadow Tree est le fondement du fonctionnement de Fabric. Contrairement à l’ancienne architecture, où Shadow Tree n’existait que du côté C++ et était séparé de l’arbre JS via le Bridge asynchrone, Fabric crée une représentation hiérarchique entièrement synchronisée de l’UI. Les nœuds de Shadow Tree stockent les props, l’état et les styles des composants, tandis que Yoga calcule la mise en page directement au niveau C++.

Lorsqu’un composant React met à jour son état, React Native envoie un nouveau Shadow Node à Fabric. Fabric ne re-rend pas toute l’UI — il utilise un algorithme de différence au niveau C++ pour déterminer quels nœuds ont changé. Seuls les nœuds modifiés sont envoyés pour le rendu natif, ce qui réduit considérablement la quantité de travail.

Rendu en trois phases de Fabric

Le processus de rendu dans Fabric comprend trois phases qui s’exécutent de manière synchrone au niveau C++ sans changement de thread. La première phase est Render : React appelle la fonction de rendu du composant, qui retourne un arbre d’éléments React. La deuxième phase est Commit : React Native crée un nouveau Shadow Tree et calcule les changements basés sur l’ancienne version. La troisième phase est Mount : Fabric applique les changements à l’UI native, créant, mettant à jour ou supprimant des UIViews.

  • Render — exécuté sur le thread JS, crée un arbre d’éléments React.
  • Commit — le Shadow Tree C++ calcule le diff et forme une liste de mutations.
  • Mount — les mutations sont appliquées à l’UI native sur le thread principal.

Les trois phases fonctionnent comme un seul pipeline où les données sont transférées via JSI sans sérialisation. C’est une différence clé par rapport à l’ancienne architecture, où il y avait des ruptures entre les phases : JS → (JSON) → Shadow Thread → (mise en page) → Native Thread.

Fabric vs ancien moteur de rendu : comparaison

La comparaison de Fabric avec l’ancien moteur de rendu montre à quel point l’architecture de React Native a changé. L’ancien moteur de rendu fonctionnait de manière asynchrone, divisant le processus de rendu en trois threads indépendants. Fabric combine tout en un seul pipeline C++.

CaractéristiqueAncien moteur de renduFabric
ArchitectureTrois threads (JS, Shadow, Native)Pipeline C++ unique
SynchronieRendu asynchroneRendu synchrone
Shadow TreeMutable, chaque thread a sa propre copieImmuable, unifié
CanauxBridge + sérialisation JSONJSI + appel C++ direct
PerformancesJusqu’à 16 ms de retard par imageMoins de 1 ms de retard par image

En pratique, Fabric est particulièrement bénéfique pour les applications avec des mises à jour fréquentes de l’UI : animations, défilements avec en-têtes flottants, données en temps réel. Pour les pages statiques (texte, boutons) la différence est moins notable. Selon les benchmarks de Meta, Fabric réduit le temps de rendu initial des listes de 40–60%.

JSI et Fabric : nouvelle communication

JSI (JavaScript Interface) est un composant clé qui rend Fabric possible. Grâce à JSI, Fabric obtient un accès direct aux valeurs JavaScript sans sérialisation. Lorsque React transmet des props à Fabric, elles ne sont pas copiées via JSON — JSI transmet des pointeurs vers les données dans la mémoire du moteur JS.

L’architecture JSI permet à Fabric de fonctionner avec n’importe quel moteur JavaScript — Hermes, JSC ou V8. Le code C++ de Fabric ne dépend pas d’une implémentation spécifique du moteur JS, ce qui simplifie la maintenance et les tests. Toutes les opérations de l’UI — création, mise à jour, suppression — sont effectuées via JSI, garantissant une latence minimale.

cpp
// Pipeline de rendu C++ de Fabric via JSI
void mountShadowNode(
    jsi::Runtime& runtime,
    const ShadowNode::Shared& shadowNode,
    const ShadowNode::SharedList& children
) {
    auto props = shadowNode->getProps();
    auto state = shadowNode->getState();

    // Transfert synchrone de props via JSI
    jsiValue.asObject(runtime)
        .getProperty(runtime, "style")
        .asObject(runtime);

    // Calcul de mise en page directement via Yoga
    auto layoutMetrics =
        YogaLayoutableShadowNode::layout(children);

    // Appliquer les mutations à l’UI native
    UIManager::synchronouslyUpdateViewOnUIThread(
        shadowNode->getTag(), layoutMetrics
    );
}

L’avantage clé est la mise à jour synchrone. Dans l’ancienne architecture, l’UI était mise à jour via une file d’attente asynchrone : React envoyait une commande via Bridge, Shadow Thread traitait la mise en page, Native Thread rendait. Dans Fabric, toutes les étapes sont exécutées séquentiellement en un seul passage. Cela élimine les conditions de concurrence et garantit que l’UI correspond à l’état actuel de l’application.

Migration vers Fabric

La migration vers Fabric ne nécessite pas de réécrire les composants React — tous les composants React Native existants continuent de fonctionner. Cependant, les bibliothèques avec du code natif (Native Module, ViewManager personnalisé) peuvent nécessiter des mises à jour. Meta recommande de vérifier la compatibilité de chaque bibliothèque avant d’activer la nouvelle architecture.

Pour activer Fabric dans un projet React Native 0.76+, définissez le flag newArchEnabled : true dans react-native.config.js. Fabric s’activera automatiquement avec Turbo Module. En cas de problème, Fabric peut être désactivé en revenant à l’ancien moteur de rendu sans modifier le code de l’application — les deux architectures sont prises en charge en parallèle.

js
// package.json — vérifier les bibliothèques compatibles Fabric
"react-native": "0.76.6",
"react-native-safe-area-context": "^5.0.0",
"react-native-screens": "^4.0.0",
"react-native-reanimated": "^3.16.0",
"react-native-gesture-handler": "^2.21.0"

Lors de la migration, il est important de mettre à jour toutes les bibliothèques natives vers des versions compatibles avec Fabric. Les bibliothèques majeures comme react-native-reanimated et react-native-gesture-handler prennent déjà en charge la nouvelle architecture. Pour les bibliothèques qui n’ont pas encore été mises à jour, Fabric fournit un mécanisme de compatibilité — si une bibliothèque ne prend pas en charge Fabric, le moteur de rendu revient automatiquement à l’ancien pour cette bibliothèque.

Foire aux questions

Fabric est-il disponible dans React Native Expo ?

Oui, à partir d’Expo SDK 52, la nouvelle architecture est activée par défaut. Fabric et Turbo Modules sont disponibles dans managed workflow sans configuration supplémentaire.

Fabric améliore-t-il les performances des animations ?

Fabric améliore considérablement les animations grâce au rendu synchrone. Les animations sur le thread JS ne concurrencent plus le traitement des messages Bridge, ce qui élimine les à-coups et les chutes de FPS.

Dois-je réécrire les composants UI pour Fabric ?

Non, tous les composants React Native standard fonctionnent avec Fabric sans modification. Seuls les composants ViewManager personnalisés nécessitent une mise à jour pour prendre en charge la nouvelle architecture.

Comment désactiver Fabric et revenir à l’ancien moteur de rendu ?

Définissez newArchEnabled : false dans react-native.config.js et reconstruisez l’application. Tous les modules et composants continueront de fonctionner sans modification — Fabric et l’ancien moteur de rendu sont entièrement interchangeables.

Qu’est-ce que le mode bridgeless dans React Native ?

Le mode bridgeless est un mode de fonctionnement de Fabric dans lequel le Bridge est complètement désactivé. Toutes les communications passent uniquement via JSI, offrant des performances maximales. Disponible dans React Native 0.76+.

Résumé

  • Fabric — un nouveau moteur de rendu C++ React Native qui combine le calcul de mise en page et le rendu UI dans un seul pipeline.
  • Shadow Tree — un arbre immuable de nœuds fantômes permettant un calcul efficace des changements sans re-rendu complet.
  • Synchronie — Fabric élimine les retards associés au rendu asynchrone de l’ancienne architecture.
  • JSI — Fabric utilise une interface C++ directe pour le transfert de données sans sérialisation JSON.
  • Compatibilité — Fabric prend en charge le fonctionnement parallèle avec l’ancien moteur de rendu pour les bibliothèques sans nouvelle architecture.
  • Performances — le temps de rendu des listes est réduit de 40–60%, les animations fonctionnent plus fluidement.
  • Migration — activation de Fabric via le flag newArchEnabled, prise en charge du mode bridgeless pour des performances maximales.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi