React Native-da Bridge — bu nima, ishlash printsipi va o'zaro aloqa

Muallif: IT Sectr Nashr etilgan: 2026-06-03 O'qish vaqti: 9 daq

Bridge — React Native-ning arxitektura komponenti bo'lib, JavaScript oqimi va iOS hamda Android nativ muhiti o'rtasida asinxron aloqani ta'minlaydi. U navbat orqali seriyalashtirilgan JSON xabarlarini uzatadi, JS kodidan nativ API-larni chaqirishga imkon beradi. Meta, 2024 ma'lumotlariga ko'ra, Bridge mavjud ilovalarning asosi bo'lib qolmoqda, garchi ishlash tezligi bo'yicha JSI asosidagi yangi arxitekturadan pastroq bo'lsa ham.

Asosiy fikrlar

  • Bridge — React Native-da JavaScript va nativ kod o'rtasidagi asinxron aloqa kanali.
  • Seriyalashtirish — barcha ma'lumotlar uzatishdan oldin JSON-ga aylantiriladi, bu qo'shimcha yuk hosil qiladi.
  • Asinxronlik — xabarlar navbat orqali uzatiladi, shuning uchun JS nativ oqimni bloklamaydi.
  • Cheklovlar — Bridge seriyalashtirish xarajatlari tufayli tez-tez kichik chaqiruvlar uchun mos emas.
  • Almashtirish — React Native-ning yangi arxitekturasida Bridge JSI va Turbo Module bilan almashtiriladi.

React Native-da Bridge nima?

Bridge (Ko'prik) — React Native-ning asosiy arxitektura elementi bo'lib, ilovaning biznes mantiqi bajariladigan JavaScript oqimi bilan iOS va Android nativ oqimlari o'rtasida ikki tomonlama asinxron aloqani ta'minlaydi. React Native 2015-yilda chiqarilganidan beri Bridge JS kodining platforma API-lari — kamera, geolokatsiya, fayl tizimi, bildirishnomalar va boshqa nativ imkoniyatlar bilan o'zaro aloqasining yagona usuli bo'lib qoldi.

Bridge arxitekturasi xabar navbati (message queue) printsipiga asoslanadi. JavaScript kodi nativ metodni chaqirganda, so'rov JSON satriga seriyalashtiriladi, navbatga joylashtiriladi va asinxron tarzda nativ tomonga yuboriladi. Nativ kod so'rovni qayta ishlaydi, tegishli operatsiyani bajaradi va natijani xuddi shu navbat orqali JS oqimiga qaytaradi. Meta-ning React Conf 2021 hisobotiga ko'ra, o'rtacha ilovada Bridge orqali sekundiga 10 000 ta xabar o'tadi.

Bridge ishida ishtirok etadigan asosiy oqimlar: JavaScript Thread (JS kodining bajarilishi), Native Thread (nativ operatsiyalarning bajarilishi) va Shadow Thread (Yoga yordamida maketni hisoblash). Har bir oqim mustaqil ishlaydi, bu interfeysning sezgirligini ta'minlaydi — nativ animatsiyalar JS hisob-kitoblari bilan bloklanmaydi.

Bridge arxitekturasi qanday ishlaydi

Bridge aloqa uchun uchta asosiy mexanizmdan foydalanadi: MessageQueue, JSON seriyalashtirish va xabarlarni guruhlash. MessageQueue — React Native-ning ichki komponenti bo'lib, JS va nativ tomon o'rtasidagi chaqiruvlar navbatini boshqaradi. Har bir nativ metod chaqiruvi navbatga joylashtiriladi, seriyalashtiriladi va ishlashni optimallashtirish uchun guruh bo'lib yuboriladi.

MessageQueue va seriyalashtirish

MessageQueue guruhlash printsipi bilan ishlaydi: nativ metod chaqiruvlari to'planadi va har 5–15 millisekundda bir guruh (batch) sifatida yuboriladi. Bu seriyalashtirish xarajatlarini kamaytiradi, chunki bir nechta chaqiruv bir JSON paketiga joylanadi. Nativ tomonda xabarlar deseriyalashtiriladi va tegishli modullarga taqsimlanadi.

Modullarni ro'yxatdan o'tkazish

Nativ modullar makroslar yoki annotatsiyalar orqali avtomatik ro'yxatdan o'tkaziladi. iOS-da RCT_EXPORT_MODULE makrosi, Android-da @ReactMethod annotatsiyasi ishlatiladi. React Native ilova ishga tushganda ro'yxatdan o'tgan modullarni skanerlaydi va barcha mavjud metodlarning konfiguratsiya JSON xaritasini tuzadi. Bu xarita JS muhitiga uzatiladi va JavaScript qaysi metodlarni chaqirish mumkinligini bilib oladi.

Ma'lumotlar oqimi

Ma'lumotlar quyidagi yo'ldan o'tadi: JavaScript NativeModules.CalendarModule.createCalendarEvent() chaqiradi. Metod modul identifikatori, metod nomi va argumentlari bilan JSON xabariga seriyalashtiriladi. Xabar MessageQueue navbatiga tushadi. Nativ oqimda xabar deseriyalashtiriladi va tegishli modulga uzatiladi. Bajarish natijasi orqaga seriyalashtiriladi va Promise yoki callback sifatida JS oqimiga yuboriladi.

js
            // JavaScript-dan Bridge orqali nativ modul chaqiruvi
import { NativeModules } from 'react-native';

const CalendarModule = NativeModules.CalendarModule;

CalendarModule.createCalendarEvent('Test Event', 'Office')
  .then(eventId => {
    console.log('Yaratilgan hodisa id:', eventId);
  })
  .catch(error => {
    console.error('Muvaffaqiyatsiz:', error);
  });

Nativ tomonda iOS moduli RCT_EXPORT_MODULE makrosi bilan Objective-C sinfi sifatida ko'rinadi. Metod RCT_EXPORT_METHOD makrosi bilan eksport qilinadi va React Native uni avtomatik ravishda Bridge-da ro'yxatdan o'tkazadi. Argumentlar pozitsiya bo'yicha uzatiladi va qo'llab-quvvatlanadigan JSON turlariga mos kelishi kerak: NSString, NSNumber, NSArray, NSDictionary, BOOL.

objective-c
            // Bridge-da iOS Nativ Modul ro'yxatdan o'tkazish
@interface CalendarModule () RCT_EXPORT_MODULE()
@end

@implementation CalendarModule

RCT_EXPORT_METHOD(createCalendarEvent:(NSString *)name
                  location:(NSString *)location
                  resolver:(RCTPromiseResolveBlock)resolve
                  rejecter:(RCTPromiseRejectBlock)reject)
{
  NSNumber *eventId = createEvent(name, location);
  resolve(eventId);
}

@end

Bridge-ning cheklovlari va muammolari

Bridge bir qator asosiy ishlash cheklovlariga ega. Ulardan asosiysi — majburiy asinxronlik va seriyalashtirish. Har bir nativ metod chaqiruvi ma'lumotlarni JSON satriga aylantiradi, bu kechikish qo'shadi va xotira sarflaydi. Katta hajmdagi ma'lumotlar bilan operatsiyalar, masalan, tasvirlarni qayta ishlash yoki video bilan ishlash uchun bu tor joyga aylanadi.

Seriyalashtirish xarajatlari

JSON seriyalashtirish va deseriyalashtirish protsessor vaqti va xotirani talab qiladi. Har bir xabar JS tomonda satrga aylantirilishi, ko'prik orqali uzatilishi va nativ tomonda tahlil qilinishi kerak. Callstack (2022) testlariga ko'ra, Bridge orqali 10 000 sonli massivni seriyalashtirish taxminan 30–50 millisekund davom etadi, bu yuqori chastotali chaqiruvlar uchun qabul qilib bo'lmaydigan daraja.

Xabar o'lchami cheklovi

Bridge katta ikkilik ma'lumotlarni uzatish uchun optimallashtirilmagan. Fotosuratlar, audiofayllar va video oqimlari muqobil yondashuvlarni talab qiladi — masalan, faylni diskka yozish va yo'lni satr sifatida uzatish. Bu fayl tizimini o'qish va yozish uchun qo'shimcha xarajatlar yaratadi.

  • Asinxronlik — Bridge sinxron chaqiruvlarni qo'llab-quvvatlamaydi, bu darhol javob talab qiladigan stsenariylarni murakkablashtiradi.
  • Xotira — har bir xabar qayta ishlanmaguncha navbatda saqlanadi, bu xotira iste'molining oshishiga olib kelishi mumkin.
  • Nosozliklarni tuzatish — Bridge-da xabarlarni kuzatish qiyin, chunki chaqiruv zanjiri oqimlar o'rtasida uziladi.

Bu cheklovlarni anglash Meta jamoasini React Native-ning yangi arxitekturasini ishlab chiqishga olib keldi, unda Bridge JSI (JavaScript Interface) va Turbo Module bilan almashtiriladi. JSI nativ metodlarni to'g'ridan-to'g'ri, seriyalashtirishsiz chaqirishga imkon beradi, bu Bridge-ning asosiy kamchiligini bartaraf qiladi.

Bridge vs Turbo Module: taqqoslash

Bridge va Turbo Module taqqoslashi arxitektura yondashuvlaridagi asosiy farqlarni ko'rsatadi. Bridge JSON seriyalashtirish bilan asinxron xabar navbatidan foydalanadi, Turbo Module esa JSI — JavaScript va C++ o'rtasidagi to'g'ridan-to'g'ri interfeys orqali ishlaydi, bu ma'lumotlarni o'zgartirmasdan nativ metodlarni sinxron chaqirishga imkon beradi.

XususiyatBridgeTurbo Module
Chaqiruv turiAsinxronSinxron va asinxron
SeriyalashtirishHar bir chaqiruvda JSONJSI obyektlari, nusxalamasdan
Ishlash tezligiO'rtachaYuqori
TiplashDinamikStatik (Codegen)
YuklashBarcha modullar boshlangandaDangasa (talab bo'yicha)

Bridge va Turbo Module o'rtasidagi tanlov React Native versiyasiga bog'liq. React Native 0.72 va eskiroq loyihalar uchun Bridge asosiy mexanizm bo'lib qoladi. React Native 0.73 dan boshlab, Metro va yangi arxitektura parallel ravishda qo'llab-quvvatlanadi, bosqichma-bosqich migratsiyaga imkon beradi. Turbo Module-ga to'liq o'tish React Native 0.76+ ga yangilash va konfiguratsiyada yangi arxitekturani yoqishni talab qiladi.

Bridge orqali Native Module sozlash namunasi

Keling, taqvim bilan ishlash moduli misolida Bridge orqali Native Module yaratish va ishlatishning to'liq siklini ko'rib chiqaylik. Modul hodisa yaratadi va uning identifikatorini qaytaradi. Bu misol ikkala platforma — iOS va Android uchun sozlamani o'z ichiga oladi.

Android moduli

Android-da Native Module ReactContextBaseJavaModule dan meros oladigan Java sinfi sifatida yaratiladi. @ReactMethod annotatsiyasi metodni Bridge-ga eksport qiladi. Promise uchun com.facebook.react.bridge dan Promise interfeysi ishlatiladi.

java
public class CalendarModule extends ReactContextBaseJavaModule {

    @Override
    public String getName() {
        return "CalendarModule";
    }

    @ReactMethod
    public void createCalendarEvent(
            String name,
            String location,
            Promise promise) {
        try {
            Integer eventId = createCalendarEventNative(name, location);
            promise.resolve(eventId);
        } catch (Exception e) {
            promise.reject("EVENT_ERROR", e.getMessage());
        }
    }
}

Ro'yxatdan o'tkazish va ishlatish

Modul @ReactModule orqali yoki qo'lda ilova paketida ro'yxatdan o'tkaziladi. React Native uni avtomatik aniqlaydi va Bridge-ga qo'shadi. Ro'yxatdan o'tkazilgandan so'ng, modul JavaScript-dan NativeModules orqali mavjud bo'ladi.

java
public class CalendarPackage implements ReactPackage {

    @Override
    public List<NativeModule> createNativeModules(
            ReactApplicationContext reactContext) {
        return Arrays.asList(
            new CalendarModule(reactContext)
        );
    }

    @Override
    public List<ViewManager> createViewManagers(
            ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
}

Shuni ta'kidlash muhimki, Bridge yangi modullar qo'shilganda ilovani qayta ishga tushirishni talab qiladi, chunki konfiguratsiya xaritasi inicializatsiya vaqtida bir marta quriladi. Bu uni dangasa yuklanadigan va modullarni qayta ishga tushirmasdan hot-reload-ni qo'llab-quvvatlaydigan Turbo Module dan farqlaydi.

Tez-tez beriladigan savollar

Bridge to'g'ridan-to'g'ri ma'lumot uzatishdan qanday farq qiladi?

Bridge har doim asinxron navbat va JSON seriyalashtirishdan foydalanadi, JSI orqali to'g'ridan-to'g'ri uzatish esa sinxron va ma'lumotlarni nusxalamasdan ishlaydi. Bridge seriyalashtirishda kechikish yaratadi, lekin oqimlarning izolyatsiyasini ta'minlaydi.

Bridge orqali metodlarni sinxron chaqirish mumkinmi?

Yo'q, Bridge faqat asinxron chaqiruvlarni qo'llab-quvvatlaydi. Sinxron o'zaro aloqa uchun JSI va Turbo Module bilan yangi arxitektura talab qilinadi. Bu React Native 0.76+ da hal qilingan asosiy cheklovlardan biridir.

Bridge qanday ma'lumot turlarini qo'llab-quvvatlaydi?

Bridge JSON-ga seriyalashtiriladigan turlarni qo'llab-quvvatlaydi: satrlar, raqamlar, mantiqiy qiymatlar, massivlar, lug'atlar (obyektlar). Tasvirlar kabi ikkilik ma'lumotlar fayl tizimi yoki base64 kodlash orqali uzatilishi kerak.

Bridge ishlashini qanday o'lchash mumkin?

O'lchash uchun React DevTools va React Native profilatoridan foydalaning. Performance bo'limi Bridge navbatidagi xabarlar soni va kechikishlarni ko'rsatadi. Trafikni kuzatish uchun react-native-bridge-spy paketi ham mavjud.

Qachon Bridge-dan Turbo Module-ga o'tish kerak?

Yuqori ishlash tezligini talab qiladigan loyihalarda yoki React Native 0.76+ da yangi ilovalar yaratishda o'tish tavsiya etiladi. Mavjud loyihalar uchun migratsiya bosqichma-bosqich bo'lishi mumkin — ikkala arxitektura parallel ishlaydi.

Xulosa

  • Bridge — JavaScript va React Native nativ kodi o'rtasida JSON seriyalashtirishga asoslangan asinxron aloqa mexanizmi.
  • MessageQueue xabar navbatini boshqaradi, xarajatlarni kamaytirish uchun chaqiruvlarni guruhlarga birlashtiradi.
  • Seriyalashtirish Bridge orqali katta ma'lumotlar massivlarini uzatishda 30–50 ms kechikish yaratadi.
  • Cheklovlar arxitekturada sinxron chaqiruvlarning yo'qligi va tez-tez xabar almashishda yuqori xotira sarfini o'z ichiga oladi.
  • Yangi arxitektura React Native Bridge-ni JSI va Turbo Module bilan almashtirib, seriyalashtirishsiz to'g'ridan-to'g'ri kirishni ta'minlaydi.
  • Moslik — Bridge React Native 0.72+ gacha ishlaydi, 0.73+ versiyalarida esa ikki arxitekturaning parallel ishlashi mumkin.
  • Tanlov — yangi loyihalar uchun yangi arxitektura afzal; mavjud loyihalar bosqichma-bosqich migratsiya qiladi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing