Mobil Micro Frontend'ler: React Native, Expo ve WebView'lar
React Native ve Expo WebView'lar ile mobil micro frontend mimarisi oluşturma. Gerçek dünya örnekleri ve en iyi uygulamalar.
Bir projede takımımız giderek yaygınlaşan bir meydan okumayla karşılaştı: farklı takımlardan gelen, her birinin kendi deployment döngüleri ve teknoloji stack'leri olan birden fazla web tabanlı servisi entegre edebilecek bir mobil uygulama oluşturmamız gerekiyordu. Yakalayıcı nokta? Teslim etmek için 8 haftamız vardı ve web takımları bize yardım etmek için özellik geliştirmelerini durduramazdı.
İşte o zaman WebView'ları kullanarak React Native uygulamamıza micro frontend mimarisi getirmeye karar verdik. Ardından gelen 6 ay hata ayıklama, performans optimizasyonu ve hiç uygulayacağımı düşünmediğim yaratıcı çözümlerle doluydu. İşte öğrendiklerimiz.
Mobil Micro Frontend Serisi
Bu, mobil micro frontend'ler üzerine kapsamlı 3 bölümlük serinin 1. Bölümü:
- Kısım 1 (Burada bulunuyorsunuz): Mimari temelleri ve WebView entegrasyon kalıpları
- Kısım 2: WebView iletişim kalıpları ve servis entegrasyonu
- Kısım 3: Çok kanallı mimari ve production optimizasyonu
Mobil micro frontend'lere yeni misiniz? Mimari ve uygulama temellerini anlamak için buradan başlayın.
Uygulamaya hazır mısınız? İletişim kalıpları için Kısım 2'ye geçin.
Production'da çalışıyor musunuz? Optimizasyon stratejileri için Kısım 3'ü kontrol edin.
Neden Mobil Micro Frontend'ler?
Geleneksel mobil uygulama geliştirmenin temel bir sorunu vardır: native kod deployment'ı yavaştır. App store incelemeler, kullanıcı güncelleme benimsemesi ve birden fazla takım arasında release koordinasyonu, web geliştiricilerinin yıllar önce çözdüğü darboğazlar yaratır.
Bizim özel kısıtlarımız şunlardı:
- Mevcut React/Vue/Angular uygulamaları olan 5 farklı web takımı
- Aylık mobil release'lere karşı haftalık web deployment'ları
- Uygulama güncellemelerini bekleyemeyen A/B test gereksinimleri
- Anında deployment yeteneğine ihtiyaç duyan uyumluluk özellikleri
Çözüm? WebView'ları kullanarak React Native uygulamamıza web tabanlı micro frontend'leri gömme.
Mimari Genel Bakış
İşte uyguladığımız üst düzey mimari:
Native uygulama şunları yapan bir shell görevi görür:
- Kimlik doğrulama ve oturum yönetimini ele alır
- Native işlevsellik sağlar (kamera, biyometrik, vb.)
- Micro frontend'ler arası navigasyonu yönetir
- WebView'lar ve native kod arasında iletişim köprüsü uygular
Alternatif Yaklaşımlar: Geleneksel WebView'ların Ötesinde
WebView implementasyonumuza dalmadan önce, değerlendirdiğimiz alternatif yaklaşımları ve neden bunlar yerine WebView'ları seçtiğimizi paylaşayım.
Seçenek 1: Module Federation ile Re.Pack
Re.Pack, Callstack'ın Module Federation'ı React Native'e getirmek için çözümüdür. Esasen React Native'de çalışan webpack'in Module Federation'ıdır.
Denediğimiz şey:
Neden seçmedik:
- Karmaşıklık: Mevcut webpack konfigürasyonlarımızda önemli değişiklikler gerektiriyordu
- Takım koordinasyonu: Tüm takımların aynı anda Re.Pack'i benimser gerekiyordu
- Hata ayıklama: React Native'de Module Federation hata ayıklama hala olgunlaşmamıştı
- Performans: Federation overhead'ı nedeniyle ilk bundle boyutu 40% arttı
Ne zaman Re.Pack kullanılır:
- Yeni bir projeyle sıfırdan başlıyorsanız
- Tüm takımlar aynı bundler üzerinde koordinasyon kurabiliyorsa
- Gerçek runtime modül paylaşımına ihtiyacınız varsa
- Birden fazla bağımsız takımla "super app" inşa ediyorsanız
Seçenek 2: React Native ile Rspack
Rspack, webpack uyumlu ama çok daha hızlı Rust tabanlı bir bundler'dır. Micro frontend build'lerimiz için Rspack kullanmayı denedik.
Denediğimiz şey:
Neden seçmedik:
- React Native uyumluluğu: Rspack'in henüz native React Native desteği yok
- Ekosistem olgunluğu: Webpack'e kıyasla daha az plugin ve loader
- Takım benimsenemesi: 5 takımı yeni bir bundler üzerinde yeniden eğitmeyi gerektirecekti
- Production kararlılığı: Daha yeni bir araçta zaman çizelgemizi riske atamazdık
Ne zaman Rspack kullanılır:
- Sadece web micro frontend'leri inşa ediyorsanız
- Build performansı kritikse (Rspack webpack'ten 10x daha hızlı)
- Erken benimser olmayı göze alabilirserniz
- Takımlarınız Rust tabanlı araçlarla rahatta
Seçenek 3: Vite + React Native
Ayrıca hızlı HMR ve modern build sisteminden yararlanarak micro frontend build'lerimiz için Vite kullanmayı değerlendirdik.
Denediğimiz şey:
Neden seçmedik:
- Module Federation: Vite'ın Module Federation desteği hala deneyseldi
- Production build'ler: Production build'lerimiz webpack'ten daha yavaştı
- Plugin ekosistemi: Özel ihtiyaçlarımız için daha az plugin
- Takım aşinalığı: Takımlar webpack ile daha rahattı
Ne zaman Vite kullanılır:
- Modern web uygulamaları inşa ediyorsanız
- Geliştirme hızı production optimizasyonundan daha önemliyse
- Karmaşık Module Federation'a ihtiyacınız yoksa
- Takımlarınız modern araçları tercih ederse
Seçenek 4: Hibrit Yaklaşım (Gerçekte Yaptığımız)
Tüm seçenekleri değerlendirdikten sonra, bize tüm dünyaların en iyisini veren hibrit bir yaklaşım seçtik:
Neden bu işe yaradı:
- Takım özerkliği: Her takım tercih ettiği bundler'ı kullanabiliyordu
- Kademeli migrasyon: Takımlar zaman içinde daha iyi araçlara migrate olabiliyordu
- Risk azaltması: Bir yaklaşım başarısız olsa, diğerleri çalışmaya devam ediyordu
- Performans: Her takım kendi build'lerini optimize edebiliyordu
Uygulama: Gerçek Hikaye
WebView Mimarisini Kurma
Expo'nun WebView'ıyla başladık, ama hızlıca ilk meydan okumamızla karşılaştık. İlk implementasyon aldatıcı derecede basit görünüyordu:
Bu geliştirme ortamında tam 5 dakika çalıştı, sonra ilk production sorunumuza çarptık: WebView, 4GB'den az RAM'i olan Android cihazlarda rastgele beyaz ekran gösteriyordu.
Bellek Sorunu
Crash raporlama ekledikten sonra, WebView'ların her birinin 150-200MB tükettiğini keşfettik. 3 micro frontend yüklendiğinde, düşük seviye cihazlarda bellek limitlerini aşıyorduk. İşte nasıl çözdük:
Bundle Boyutu Sorunu
İlk micro frontend bundle'larımız devasaydı - her biri 2-3MB. Bu yavaş yükleme süreleri ve kötü kullanıcı deneyimine neden oluyordu. İşte nasıl optimize ettik:
Alternatif: Rspack Konfigürasyonu
Rspack'i denemek isteyen takımlar için, işte eşdeğer konfigürasyon:
Performans karşılaştırması:
- Webpack build süresi: 45 saniye
- Rspack build süresi: 8 saniye (82% daha hızlı)
- Bundle boyutu: Benzer (5% içinde)
- Bellek kullanımı: Rspack build'ler sırasında 30% daha az bellek kullandı
Navigasyon Sorunu
WebView navigasyonu native navigasyon gibi çalışmaz. Kullanıcılar geri butonunun çalışmasını bekler, ama WebView'ların kendi geçmişi vardır. İşte çözümümüz:
Performans Sonuçları
Bu optimizasyonlar metriklerimizde önemli iyileşmelere yol açtı:
Yükleme Performansı
- İlk yükleme süresi: 2.3s → 0.8s (65% iyileşme)
- Bundle boyutu: 2.8MB → 1.2MB (57% azalma)
- Bellek kullanımı: WebView başına 200MB → 120MB (40% azalma)
Kullanıcı Deneyimi
- Uygulama çökmeleri: 2.3% → 0.1% (96% azalma)
- Beyaz ekran olayları: 15% → 1% (93% azalma)
- Kullanıcı memnuniyet puanı: 3.2 → 4.6 (44% iyileşme)
Build Performansı
- Webpack build'leri: 45s → 35s (22% daha hızlı)
- Rspack build'leri: 8s (webpack'ten 82% daha hızlı)
- Geliştirme HMR: 2s → 0.3s (85% daha hızlı)
Anahtar Öğretiler
-
WebView'lar uygulanabilir ama optimizasyon gerektirir: Micro frontend'ler için iyi çalışırlar ama dikkatli bellek ve performans yönetimi gerektirir.
-
Hibrit yaklaşımlar en iyi çalışır: Takımların tercih ettikleri araçları kullanmalarına izin verirken tutarlı bir arayüz sürdürün.
-
Rspack umut verici: Yeni projeler için hızı ve webpack uyumluluğu nedeniyle Rspack'i düşünün.
-
Re.Pack güçlü ama karmaşık: Super app'ler için harika ama önemli koordinasyon gerektirir.
-
Performans kritik: Kullanıcılar yavaş WebView'ları hemen fark eder. Agresif optimize edin.
Sırada Ne Var?
Kısım 2'de şunlara dalacağız:
- WebView'lar ve native kod arasında sağlam iletişim köprüsü kurma
- Type-safe mesaj geçişi
- Kimlik doğrulama ve native özellikleri ele alma
- Hata ayıklama ve izleme stratejileri
Temel çok önemlidir. Mimarimizi doğru kurarsanız, diğer her şey yönetilebilir hale gelir. Yanlış kurarsanız, sonsuza kadar performans sorunlarıyla mücadele edersiniz.
Bir dahaki sefer, WebView'ları ve native kodun birbirleriyle güvenilir bir şekilde nasıl konuşturulacağına ve yol boyunca çözdüğümüz hata ayıklama kaburlara bakacağız.
React Native ile Mobil Micro Frontend'ler
React Native, Expo ve WebView'lar kullanarak mobil micro frontend'ler oluşturma üzerine 3 bölümlük kapsamlı seri. Mimari, iletişim pattern'leri ve production optimizasyonu dahil.