React Native-də Fabric — bu nədir, render arxitekturası və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-06-04 Oxuma vaxtı: 10 dəq

Fabric — tamamilə C++ dilində yenidən yazılmış və JSI ilə inteqrasiya edilmiş yeni React Native rendereridir. O, UIView və ViewManager əsaslı köhnə renderi əvəz edərək, UI-nin sinxron yenilənməsini və Shadow Tree vasitəsilə dəyişikliklərin səmərəli hesablanmasını təmin edir. Meta Engineering Blog, 2024-ə görə, Fabric yeni arxitekturanın məcburi komponentidir və React Native 0.76+ versiyasında mövcuddur.

Əsas məqamlar

  • Fabric — köhnə UIView renderini əvəz edən yeni C++ React Native rendereri.
  • Shadow Tree — dəyişiklikləri səmərəli hesablamağa imkan verən dəyişməz qovşaq ağacı.
  • Sinxronluq — Fabric UI-ni Bridge-in asinxron növbəsi olmadan sinxron şəkildə render edir.
  • Sürət — Fabric təkrar çəkilmələrin sayını azaldır və renderi 2–3 dəfə sürətləndirir.
  • İnteqrasiya — Fabric JSI vasitəsilə işləyərək iOS və Android üçün vahid C++ qatını təmin edir.

Fabric nədir?

Fabric — Shadow Thread və Bridge vasitəsilə işləyən köhnə rendereri əvəz edən React Native üçün yeni render sistemidir. Köhnə arxitekturada render prosesi üç addımdan ibarət idi: JavaScript Virtual DOM-u hesablayır, Shadow Thread (Yoga) layoutu hesablayır, Native Thread UIView-i render edirdi. Fabric bütün bu addımları sinxron işləyən vahid C++ konveyerində birləşdirir.

Fabric-in inkişafı 2019-cu ildə Lean Core təşəbbüsü və «Yeni Arxitektura» layihəsi çərçivəsində başladı. Əsas məqsəd asinxron üçmərhələli renderlə bağlı performans problemlərini həll etmək idi. Köhnə arxitekturada hər bir vəziyyət dəyişikliyi müxtəlif iplər vasitəsilə üç keçid tələb edirdi ki, bu da məlumat dəyişikliyi ilə UI renderi arasında gecikmə yaradırdı.

Fabric dəyişməz kölgə ağacı (Immutable Shadow Tree) konsepsiyasına əsaslanır. Ağacın hər bir qovşağı komponenti onun xüsusiyyətləri və vəziyyəti ilə təmsil edir. Vəziyyət dəyişdikdə yeni ağac yaradılır və Fabric köhnə ilə yeni ağac arasındakı fərqi hesablayaraq yalnız zəruri dəyişiklikləri nativ UI-də tətbiq edir. Bu, UIView/ViewGroup əməliyyatlarının sayını minimuma endirir və render vaxtını qısaldır.

Shadow Tree necə işləyir

Shadow Tree — Fabric-in işinin əsasıdır. Köhnə arxitekturadan fərqli olaraq, burada Shadow Tree yalnız C++ tərəfində mövcud idi və asinxron Bridge vasitəsilə JS ağacından ayrılmışdı. Fabric tam sinxronlaşdırılmış iyerarxik UI təsvirini yaradır. Shadow Tree qovşaqları komponentlərin xüsusiyyətlərini, vəziyyətini və stillərini saxlayır, Yoga isə birbaşa C++ səviyyəsində layoutu hesablayır.

React komponenti öz vəziyyətini yenilədikdə, React Native Fabric-ə yeni Shadow Node göndərir. Fabric bütün UI-ni təkrar çəkmir — dəyişən qovşaqları müəyyən etmək üçün C++ səviyyəsində müqayisə alqoritmindən (diffing) istifadə edir. Yalnız dəyişdirilmiş qovşaqlar nativ renderə göndərilir ki, bu da iş həcmini əhəmiyyətli dərəcədə azaldır.

Fabric-in üçfazalı renderi

Fabric-də render prosesi ip dəyişdirilmədən C++ səviyyəsində sinxron şəkildə yerinə yetirilən üç fazadan ibarətdir. Birinci faza — Render: React komponentin render funksiyasını çağırır, o da React Element Tree-ni qaytarır. İkinci faza — Commit: React Native yeni Shadow Tree yaradır və köhnə versiya əsasında dəyişiklikləri hesablayır. Üçüncü faza — Mount: Fabric dəyişiklikləri nativ UI-də tətbiq edir, UIView yaradır, yeniləyir və ya silir.

  • Render — JS ipində yerinə yetirilir, React Element Tree yaradır.
  • Commit — C++ Shadow Tree diff hesablayır və mutasiya siyahısını formalaşdırır.
  • Mount — mutasiyalar əsas ipdə nativ UI-də tətbiq olunur.

Hər üç faza serializasiya olmadan JSI vasitəsilə məlumat ötürülən vahid konveyer kimi işləyir. Bu, fazalar arasında fasilələrin olduğu köhnə arxitekturadan əsas fərqdir: JS → (JSON) → Shadow Thread → (layout) → Native Thread.

Fabric vs köhnə renderer: müqayisə

Fabric-in köhnə rendererlə müqayisəsi React Native arxitekturasının nə qədər əhəmiyyətli dərəcədə dəyişdiyini göstərir. Köhnə renderer asinxron işləyir, render prosesini üç müstəqil ipə bölürdü. Fabric hər şeyi bir C++ konveyerində birləşdirir.

XüsusiyyətKöhnə rendererFabric
ArxitekturaÜç ip (JS, Shadow, Native)Vahid C++ konveyeri
SinxronluqAsinxron renderSinxron render
Shadow TreeDəyişən, hər ipdə öz surətiDəyişməz, vahid
KanallarBridge + JSON serializasiyasıJSI + birbaşa C++ çağırışı
PerformansKadr başına 16 ms-ə qədər gecikməKadr başına 1 ms-dən az gecikmə

Praktikada Fabric tez-tez UI yeniləmələri olan proqramlar üçün xüsusilə faydalıdır: animasiyalar, üzən başlıqlarla sürüşdürmə, real-vaxt məlumatları. Statik səhifələr (mətn, düymələr) üçün fərq daha az nəzərə çarpır. Meta benchmarklarına görə, Fabric siyahının ilkin yükləmə render vaxtını 40–60% qısaldır.

JSI və Fabric: yeni kommunikasiya

JSI (JavaScript Interface) — Fabric-i mümkün edən əsas komponentdir. JSI vasitəsilə Fabric serializasiya olmadan JavaScript dəyərlərinə birbaşa çıxış əldə edir. React Fabric-ə xassələri ötürdükdə, onlar JSON vasitəsilə kopyalanmır — JSI JS mühərrikinin yaddaşındakı məlumatlara göstəricilər ötürür.

JSI arxitekturası Fabric-ə istənilən JavaScript mühərriki — Hermes, JSC və ya V8 ilə işləməyə imkan verir. Fabric-in C++ kodu JS mühərrikinin konkret tətbiqindən asılı deyil, bu da texniki xidməti və testləri asanlaşdırır. UI ilə bütün əməliyyatlar — yaratma, yeniləmə, silmə — JSI vasitəsilə yerinə yetirilir ki, bu da minimal gecikməyə zəmanət verir.

cpp
// Fabric C++ render konveyeri JSI vasitəsilə
void mountShadowNode(
    jsi::Runtime& runtime,
    const ShadowNode::Shared& shadowNode,
    const ShadowNode::SharedList& children
) {
    auto props = shadowNode->getProps();
    auto state = shadowNode->getState();

    // Sinxron xassə ötürülməsi JSI vasitəsilə
    jsiValue.asObject(runtime)
        .getProperty(runtime, "style")
        .asObject(runtime);

    // Layoutun birbaşa Yoga vasitəsilə hesablanması
    auto layoutMetrics =
        YogaLayoutableShadowNode::layout(children);

    // Mutasiyaların nativ UI-də tətbiqi
    UIManager::synchronouslyUpdateViewOnUIThread(
        shadowNode->getTag(), layoutMetrics
    );
}

Əsas üstünlük — sinxron yeniləmədir. Köhnə arxitekturada UI asinxron növbə vasitəsilə yenilənirdi: React Bridge vasitəsilə əmr göndərirdi, Shadow Thread layoutu emal edirdi, Native Thread render edirdi. Fabric-də bütün addımlar bir keçiddə ardıcıl yerinə yetirilir. Bu, race condition-ları aradan qaldırır və UI-nin proqramın cari vəziyyətinə uyğun olmasına zəmanət verir.

Fabric-ə miqrasiya

Fabric-ə miqrasiya React komponentlərinin yenidən yazılmasını tələb etmir — bütün mövcud React Native komponentləri işləməyə davam edir. Lakin nativ kodlu kitabxanalar (Native Module, fərdi ViewManager) yeniləmə tələb edə bilər. Meta yeni arxitekturanı aktivləşdirməzdən əvvəl hər kitabxananın uyğunluğunu yoxlamağı tövsiyə edir.

React Native 0.76+ layihəsində Fabric-i aktivləşdirmək üçün react-native.config.js faylında newArchEnabled: true bayrağını qurun. Fabric Turbo Module ilə birlikdə avtomatik aktivləşəcək. Problem yarandıqda, Fabric-i söndürüb tətbiq kodunu dəyişmədən köhnə rendererə qayıda bilərsiniz — hər iki arxitektura paralel olaraq dəstəklənir.

js
// package.json — Fabric ilə uyğun kitabxanaları yoxlayın
"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"

Miqrasiya zamanı bütün nativ kitabxanaları Fabric ilə uyğun versiyalara yeniləmək vacibdir. react-native-reanimated və react-native-gesture-handler kimi böyük kitabxanalar artıq yeni arxitekturanı dəstəkləyir. Hələ yenilənməmiş kitabxanalar üçün Fabric uyğunluq mexanizmi təmin edir — kitabxana Fabric-i dəstəkləmirsə, renderer avtomatik olaraq bu kitabxana üçün köhnəyə keçir.

Tez-tez verilən suallar

Fabric React Native Expo-da mövcuddurmu?

Bəli, Expo SDK 52-dən başlayaraq yeni arxitektura defolt olaraq aktivləşir. Fabric və Turbo Module managed workflow-da əlavə konfiqurasiya olmadan mövcuddur.

Fabric animasiyaların performansını yaxşılaşdırırmı?

Fabric sinxron render sayəsində animasiyaları əhəmiyyətli dərəcədə yaxşılaşdırır. JS ipindəki animasiyalar artıq Bridge mesajlarının emalı ilə rəqabət aparmır ki, bu da titrəmə və FPS düşməsini aradan qaldırır.

UI komponentlərini Fabric üçün yenidən yazmaq lazımdırmı?

Xeyr, bütün standart React Native komponentləri Fabric ilə dəyişiklik olmadan işləyir. Yalnız fərdi ViewManager yeni arxitekturanı dəstəkləmək üçün yeniləmə tələb edir.

Fabric-i necə söndürüb köhnə rendererə qayıtmaq olar?

react-native.config.js faylında newArchEnabled: false təyin edin və tətbiqi yenidən qurun. Bütün modullar və komponentlər dəyişiklik olmadan işləməyə davam edəcək — Fabric və köhnə renderer tamamilə bir-birini əvəz edə bilər.

React Native-də bridgeless mode nədir?

Bridgeless mode — Bridge-in tamamilə söndürüldüyü Fabric iş rejimidir. Bütün kommunikasiya yalnız JSI vasitəsilə aparılır ki, bu da maksimum performans verir. React Native 0.76+ versiyasında mövcuddur.

Nəticə

  • Fabric — layoutun hesablanmasını və UI renderini vahid konveyerdə birləşdirən yeni C++ React Native rendereri.
  • Shadow Tree — tam təkrar çəkilmədən dəyişiklikləri səmərəli hesablamağa imkan verən dəyişməz kölgə qovşaqları ağacı.
  • Sinxronluq — Fabric köhnə arxitekturanın asinxron renderi ilə bağlı gecikmələri aradan qaldırır.
  • JSI — Fabric JSON serializasiyası olmadan məlumat ötürmək üçün birbaşa C++ interfeysindən istifadə edir.
  • Uyğunluq — Fabric yeni arxitekturası olmayan kitabxanalar üçün köhnə rendererlə paralel işləməyi dəstəkləyir.
  • Performans — siyahıların render vaxtı 40–60% qısalır, animasiyalar daha hamar işləyir.
  • Miqrasiya — Fabric-in newArchEnabled bayrağı ilə aktivləşdirilməsi, maksimum performans üçün bridgeless mode dəstəyi.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun