React Native’in en güçlü yanlarından biri, JavaScript ile yerel (native) kodlar arasında sorunsuz bir köprü kurabilmesiydi. Ancak bu köprünün ardındaki mekanizma, yıllar içinde ciddi performans kısıtlamalarına yol açtı. Geliştiriciler, JavaScript ve Swift/Objective-C ya da Java/Kotlin arasındaki veri akışının JSON tabanlı bir ara katman üzerinden gerçekleşmesi nedeniyle, uygulamalarında gecikmeler ve kararsızlıklarla karşılaşıyordu. Bu sorun, React Native’in çekirdek geliştirme ekibi tarafından uzun süredir biliniyordu ve nihayetinde 2026’da tamamen sonlandırıldı.
JSON Köprüsü Nasıl Çalışıyordu?
React Native’in eski mimarisinde, JavaScript ve yerel kodlar arasındaki iletişim üç temel adımdan oluşuyordu:
- Serileştirme: JavaScript tarafında, yerel bir yöntemi çağırmak üzere gönderilen komutlar ya da veriler, JSON formatında dizelere dönüştürülüyordu. Bu süreç, özellikle karmaşık veriler söz konusu olduğunda ek yük oluşturuyordu.
- Eşzamansız Taşıma: JSON biçimindeki bu veri paketleri, JavaScript ve yerel thread’ler arasında asenkron olarak iletiliyordu. Bu, kullanıcı arayüzünde gecikmelere neden olabiliyordu.
- Deserileştirme: Yerel tarafta, JSON verisi yeniden JavaScript’in anlayabileceği formata çevriliyor ve ilgili yerel yöntem çalıştırılıyordu. Örneğin, bir kamera sensörüne erişmek ya da bir düğmeye tıklama olayını işlemek gibi görevler bu şekilde yerine getiriliyordu.
Bu yaklaşımın en büyük dezavantajı, her iki taraf arasındaki veri akışının yavaş ve dolaylı olmasıydı. Geliştiriciler, özellikle yoğun kullanıcı etkileşimleri gerektiren uygulamalarda, performans kayıplarıyla mücadele etmek zorunda kalıyordu.
JSON Köprüsünün Kullanım Senaryoları
JSON tabanlı köprü, React Native’in varsayılan mimarisi altında çalışan standart bileşenler için gerekli değildi. Ancak bazı özel durumlarda, geliştiricilerin yerel modüller yazmasını gerektiriyordu:
- Desteklenmeyen Donanım Erişimi: Cihazın kamerası, yüz tanıma (FaceID), parmak izi sensörü ya da özel Bluetooth cihazları gibi özelliklere erişmek için yerel kod gerekiyordu.
- Üçüncü Taraf SDK Entegrasyonu: Ödeme ağları, analiz araçları ya da reklam SDK’ları gibi üçüncü taraf kitaplıkları, yalnızca iOS’taki CocoaPods ya da Android’deki Gradle bağımlılıkları şeklinde sunulduğunda, yerel entegrasyon zorunlu hale geliyordu.
- Mevcut Yerel Kodun Yeniden Kullanımı: Daha önce Swift, Kotlin ya da Objective-C ile yazılmış bir uygulamanın React Native’e taşınması gerektiğinde, yerel iş mantığının korunması için yerel modüller gerekliydi.
- Yüksek Performans Gerektiren İşlemler: Resim işleme, ses manipülasyonu ya da karmaşık veritabanı sorguları gibi yoğun hesaplama gerektiren işlemler, JavaScript’in tek iş parçacıklı yapısı nedeniyle yavaşlığa yol açıyordu.
- Özel Arayüz Bileşenleri: Standart React Native bileşenleriyle oluşturulamayan, platforma özel kullanıcı arayüzlerinin entegrasyonu için yerel modüller kullanılıyordu.
Yeni Mimarinin Yükselişi: JSI ve TurboModules
React Native’in çekirdek ekibi, yıllardır performans sorunlarını çözmek için yeni bir mimari üzerinde çalışıyordu. Bu yeni yaklaşım, JavaScript Interface (JSI) adı verilen bir sistem üzerine inşa edildi. JSI, JavaScript’in doğrudan C++ bellek referansları aracılığıyla yerel yöntemlere erişmesini sağlıyor. Bu sayede, JSON serileştirme ve deserileştirme adımları ortadan kalkıyor ve işlemler anında, eşzamansız olarak gerçekleştirilebiliyor.
Yeni mimarinin en önemli bileşenleri şunlardır:
- TurboModules: Yerel modüllerin JSI üzerinden doğrudan çağrılmasını sağlayan yeni bir yapı. Bu modüller, eski
RCTBridgeModuleya daReactContextBaseJavaModuleyerine kullanılmaya başlandı.
- Fabric Renderer: React Native’in görüntüleme sisteminin yeniden yazılan versiyonu. Bu sistem, yerel bileşenlerin JavaScript tarafından doğrudan kontrol edilmesini sağlıyor ve performansı önemli ölçüde artırıyor.
Geçiş Sürecinin Zaman Çizelgesi
React Native’in JSON köprüsünden JSI’ye geçişi, yıllar süren bir süreçti. Bu geçiş, çeşitli sürümlerde kademeli olarak hayata geçirildi:
- Mart 2022 – React Native 0.68: JSI’nin ilk deneysel versiyonu tanıtıldı. Bu sürümde, yeni mimariye (TurboModules ve Fabric Renderer) geçiş için temel oluşturuldu.
- Geç 2023 – React Native 0.73: "Bridgeless Mode" adı verilen yeni bir modun deneysel olarak kullanıma sunuldu. Bu modda, yerel ve JavaScript arasındaki köprü tamamen kaldırıldı.
- Ekim 2024 – React Native 0.76: JSI tabanlı yeni mimari, tüm yeni projeler için varsayılan hale getirildi. Eski JSON köprüsü, geçici bir uyumluluk katmanı aracılığıyla desteklenmeye devam etti.
- Ekim 2025 – React Native 0.82: Eski mimari tamamen devre dışı bırakıldı. Geliştiriciler artık
newArchEnabled=falsegibi bayrakları kullanamaz hale geldi.
- Nisan 2026 – React Native 0.85: JSON köprüsüne ait tüm kodlar, React Native’in çekirdek deposundan tamamen kaldırıldı. Artık yerel ve JavaScript arasındaki iletişimde köprü sistemi kullanılmıyor.
Ne Değişti? Ne Kaldı?
React Native 0.85 ile birlikte, JSON köprüsüne ait tüm altyapı tamamen ortadan kalktı. Peki bu, geliştiriciler için ne anlama geliyor?
- Artık Kullanılamayanlar: Eski
RCTBridgeModule(iOS) ya daReactContextBaseJavaModule(Android) gibi modüller artık desteklenmiyor. Bu modüller, JSON verisini asenkron olarak taşıyan eski köprü sistemine bağımlıydı.
- Yerine Kullanılanlar: TurboModules ve Fabric Components adı verilen yeni yapılar, JSI üzerinden doğrudan C++ fonksiyonlarını çağırabiliyor. Bu sayede, yerel ve JavaScript arasındaki iletişim neredeyse anında gerçekleşiyor.
Pratik Etkiler ve Geleceğe Yönelik Adımlar
React Native’in JSON köprüsünün tamamen kaldırılması, geliştiriciler için hem fırsatlar hem de zorluklar sunuyor. Eğer mevcut bir uygulamada eski yerel modüller kullanıyorsanız, bunları yeni mimariye taşımak için aşağıdaki adımları izleyebilirsiniz:
- Mevcut Modüllerinizi İnceleyin: Kullandığınız üçüncü taraf kitaplıkları ve özel yerel modüllerin, React Native 0.85’e uyumlu olup olmadığını kontrol edin.
- TurboModules’a Geçiş Yapın: Eski yerel modüllerinizi, JSI tabanlı TurboModules’a dönüştürün. Bu süreç, C++ ve yerel kod bilgisi gerektirebilir.
- Fabric Renderer’ı Benimseyin: Görüntüleme sisteminizi, yeni Fabric Renderer’a uyarlayın. Bu, özellikle özel bileşenler kullanıyorsanız önemlidir.
- Test Sürecini Genişletin: Yeni mimariye geçiş yaparken, uygulamanızın tüm fonksiyonlarını detaylı bir şekilde test edin. Performans ölçümleri yapın ve kullanıcı deneyimini gözden geçirin.
Geliştiricilerin, JSON köprüsünün nasıl çalıştığını anlamaları, yerel ve JavaScript arasındaki etkileşimin temellerini kavramaları açısından hâlâ önem taşıyor. Ancak artık, React Native’in geleceği, JSI ve yeni mimariye odaklanmış durumda. Bu geçiş, sadece performansı artırmakla kalmıyor, aynı zamanda geliştiricilere daha esnek ve güçlü araçlar sunuyor. React Native’in yeni mimarisi, mobil uygulama geliştirme dünyasında bir dönüm noktası olarak kabul ediliyor ve gelecekteki yeniliklerin temelini oluşturacak.
Yapay zeka özeti
React Native’in eski JSON tabanlı köprü sistemi 2026’da resmen sona erdi. JSI mimarisiyle tanışın, performans kazançlarını keşfedin ve yeni mimariye nasıl geçiş yapacağınızı öğrenin.