- Shopify, 5 yıl önce React Native’i (RN) mobil geliştirmenin geleceği ilan ettikten sonra tüm uygulamalarını başarıyla RN’e dönüştürdü
- React Native’i benimsemesinin başlıca nedenleri
- Tek sefer yazıp iki platformu desteklemek: iOS ve Android’de aynı özelliği iki kez geliştirmenin verimsizliğini ortadan kaldırmak
- Yetenek hareketliliğini artırmak: geliştiricilerin iOS, Android ve Web arasında serbestçe geçerek çalışabilmesini sağlamak
- Daha fazla değer sunmak: özellik eşdeğerliğini sağlamaya harcanan zamanı azaltıp kullanıcılara daha fazla değer ulaştırmak
- Geçişin başarılı sonuçları
- Aynı özelliğin iki kez geliştirilmemesi sayesinde üretkenlik önemli ölçüde arttı
- Mühendisler hem web hem mobilde çalışabilir hale gelerek aynı insan kaynağıyla daha fazla iş yapıldı ve yeni büyüme fırsatları yaratıldı
- iOS ile Android arasında özellik eşdeğerliğini korumak artık bir sorun olmaktan çıktı ve bu sayede daha fazla değer sunulabildi
- Uygulamalarda ekran yükleme süreleri 500 ms’nin altında kaldı ve oturumların %99,9’undan fazlası kararlı şekilde sürdü
- İş için en uygun araç olarak native kod kullanılmaya devam edilerek iki dünyanın avantajı bir arada kullanıldı
Başlıca çıkarımlar
React Native uygulamaları hızlıdır
- Shopify performansa büyük önem veriyor ve CEO Tobi Lutke, “Tüm hızlı yazılımlar harika değildir ama tüm harika yazılımlar hızlıdır” diyerek bunu vurguluyor
- React Native’e (RN) geçmeden önce en büyük soru, RN’in performans hedeflerini karşılayıp karşılayamayacağıydı
- Bu yüzden geçiş kararından önce kapsamlı prototiplemeler yapılarak bunun mümkün olup olmadığı doğrulandı
- Meta’nın performans darboğazlarını gidermek için yürüttüğü çalışmalar incelendi ve listeler gibi alanlarda katkı yapılabilecek noktalar belirlendi
- RN’in yakında daha da hızlanacağı öngörüsüyle tam ölçekli benimseme kararı alındı
- Bugün, 5 yılın ardından RN uygulamaları hızlı çalışıyor ve Shopify uygulamasında ekran yükleme süresi 500 ms altı (P75) seviyesine ulaşıyor
- Benzer performans hedefleri diğer tüm uygulamalarda da başarıyla yakalandı
- Performans darboğazlarını gidermek için iyi kalıplar ve teknikler uygulamak kritik önem taşıyor
- Native’in her zaman hızlı olacağı garanti değildir; RN de her zaman yavaş değildir
- RN son birkaç yılda büyük ilerleme kaydetti ve dünya çapında üst düzey uygulamalar geliştirebilen bir platform haline geldi
- RN çatısı olgunlaştıkça hızlı uygulamalar geliştirmenin giderek kolaylaşması bekleniyor
- Ekiplerin uzmanlığı arttıkça daha iyi uygulamalar üretme alanı da genişleyecek
Hot reloading’in avantajları
- React Native’in (RN) hot reloading özelliği geliştirme ortamında devrim niteliğinde bir yenilik oldu; değişiklikler anında yansıtılıyor
- Native geliştirmede en büyük sorunlardan biri, kod tabanının büyüklüğüne bağlı olarak küçük değişikliklerin bile derlenip emülatörde ya da gerçek cihazda çalıştırılmasının dakikalar sürebilmesiydi
- Bu durum zaman kaybına yol açıyor ve geliştiricinin iş akışını bölüyordu
- RN’in hot reloading’i bu sorunu fiilen ortadan kaldırarak üretkenliği ve geliştirme deneyimini ciddi biçimde iyileştirdi
TypeScript ile yetenek hareketliliği sağlamak
- TypeScript’in yaygınlaşmasıyla React web ile React Native (RN) arasında geliştirici geçişi daha akıcı hale geldi
- Web geliştiricileri: RN sayesinde native iOS ve Android geliştirmeye kıyasla mobil çalışmaya çok daha kolay başlayabiliyor
- Mobil geliştiriciler: RN sayesinde web tarafındaki çalışmalara kolayca katılabiliyor
- Yetenek hareketliliğinin avantajları
- Mühendislere daha fazla gelişim fırsatı sunuyor ve kaynak planlamasında esnekliği artırıyor
- Aynı geliştirici kadrosuyla daha fazla iş yapılabilmesini güçlendiriyor
- Web ile mobil arasında kod paylaşımı yoluyla daha yüksek verimlilik ve üretkenlik sağlıyor
- Birden çok platformda çalışabilen geliştiriciler daha hızlı yayın yapmayı mümkün kılıyor ve teknolojiler arasında fikir alışverişiyle bunların yeni şekillerde uygulanmasını sağlıyor
- Bu yaklaşım, teknolojiyi bir araç olarak gören bir kültür oluşturuyor; ekibin bakış açısını genişletiyor ve iş için en doğru aracı seçmesini teşvik ediyor
Native geliştiriciler vazgeçilmezdir
- iOS ve Android’de uzmanlaşmış mobil mühendisler, harika mobil uygulamalar oluşturmak için vazgeçilmezdir
- Farklı mobil ürünler geliştirirken kazanılan deneyim ile kullanılabilirlik ve platform geleneklerine dair derin anlayışın yerini başka bir şey dolduramaz
- Platform katmanına erişim, binding yazımı, build ve dağıtım süreçlerine hakimiyet, React Native sürüm yükseltmelerini yönetme gibi işler native uzmanlığı gerektirir
- Native geliştiriciler, farklı cihaz modellerinde uygulama performansını optimize eder ve tüm kullanıcılara tutarlı deneyim sunar
- iOS ve Android’in yeni özelliklerine, API’lerine ve araç zinciri değişimlerine uyum sağlamak ve React Native sürüm güncellemelerini yönetmek için kritik öneme sahiptirler
- Native mobil geliştiricilere yönelik bir React Native eğitim programı geliştirildi:
- Self-servis öğrenme biçiminde kurgulandı ve production seviyesinde kod yazabilmelerini destekledi
- React Native’de yetkin geliştiricilerle yapılan Soru-Cevap oturumları, pair programming ve code review ile ek destek sağlandı
- Web geliştiricileri (JavaScript, TypeScript, React uzmanları) mobil takımlara eklendi:
- Böylece native ve React Native arasında güçlü uzmanlık dengeli biçimde kuruldu
- Zamanla tüm ekibin teknik seviyesi yükseldi
- Native ve web geliştiricilerinin iyi harmanlandığı ekip yapısı, React Native ile harika mobil uygulamalar geliştirmenin anahtarıdır
Native kod vazgeçilmezdir
- %100 React Native kullanımından kaçınılmalı: RN, özellikleri tek sefer geliştirmeyi sağlayan verimli bir araçtır ama her durum için uygun teknoloji değildir
- Native kodun gerekli olduğu durumlar
- İleri seviye özellik geliştirme: 2D/3D tarama ve cihaz üzerinde yapay zeka modeli çalıştırma gibi donanımdan yararlanan özellikler
- Bellek kısıtlı özellikler: ana ekran ve kilit ekranı widget’ları, Apple Watch uygulamaları ve complication’lar, App Intents, Siri Shortcuts gibi özellikler
- Uzun süre çalışan arka plan işleri:
- Örnek: Shopify’nin Point of Sale uygulaması, çevrimdışıyken de işlem yapılabilmesi için arka planda büyük miktarda veriyi indirip senkronize ediyor
- Native kod kullanılarak bu arka plan işleri tamamen offload ediliyor ve uygulama performansını etkilememesi sağlanıyor
- RN çoğu özelliği tek sefer geliştirmek için uygundur; ancak native’in en iyi çalıştığı alanlarda native kod kullanmak idealdir
- RN’in doğal olarak sunduğu güçlü native birlikte çalışabilirlik, iki teknolojinin birlikte kullanılmasını kolaylaştırır
- Burada RN “veya” native değil, RN “ve” native yaklaşımıyla düşünmek önemlidir
- Native uzmanlığına sahip ekipler bu uyumu etkili biçimde hayata geçirmek için kritiktir
Debugging zorlukları
- React Native’de (RN) debugging bazı yönlerden kararsız olabiliyor ve VSCode’da doğru kurulumu yapmak için ek çaba gerektiriyor
- iOS ve Android ise güçlü ve kararlı debugging yeteneklerini varsayılan olarak sunuyor
- Meta kısa süre önce RN’in debugger yığınını tamamen yeniden yazarak iyileştirme çalışmalarına başladı; yeni debugger umut verici sonuçlar gösteriyor
- Shopify, RN’in debugging deneyimini dünya standartlarında hale getirmek için Meta ile birlikte çalışıyor
React Native güncellemeleri sorunsuz değil
- React Native’i (RN) yeni bir sürüme güncellemek ciddi emek gerektiriyor ve çoğu zaman kod tabanının yeniden düzenlenmesini zorunlu kılıyor
- Shopify bunu çözmek için küçük bir gezici geliştirici grubu oluşturdu; bu grup güncellemeleri üstlenirken diğer ekipler özellik geliştirmeye odaklandı
- RN çatısı olgunlaştıkça güncelleme sürecinin giderek kolaylaşması bekleniyor
- New Architecture daha yaygın benimsendikçe güncelleme işlerinin karmaşıklığının azalacağı öngörülüyor
Üçüncü taraf kütüphanelere bağımlılığın artması
- React Native (RN) çatısı, native’e kıyasla daha az kapsamlı olduğu için daha fazla üçüncü taraf kütüphane kullanımına yol açıyor
- Son yıllarda ekosistem olgunlaştıkça ihtiyaç duyulan neredeyse her özellik için iyi bakımı yapılan kütüphaneleri bulmak kolaylaştı
- Ancak üçüncü taraf kütüphanelerin sürekli güncel tutulması gerekiyor ve tedarik zinciri saldırı yüzeyi de genişliyor
- Shopify, Dependabot ile otomatik bağımlılık güncellemeleri uygulamaya aldı
- Otomatik kod taraması ile kötü amaçlı kod tespit edilip engelleniyor
- RN çatısının daha net bir yön kazanması ve varsayılan olarak daha fazla özellik sunacak şekilde gelişmesi bekleniyor
Paylaşılan temelleri kullanmanın büyük faydası
- React Native (RN) ilk benimsendiğinde RN ile mobil uygulama geliştirme deneyimi sınırlıydı ve native geliştirmede biriken ortak temellerden de yararlanılamıyordu
- Başlangıçta her ekip kendi sorunlarını kendi çözüp uygulamasını geliştirdi; bu, hızlı başlamak ve uygulamaları taşımak açısından etkiliydi
- Ancak ekipler aynı sorunları tekrar tekrar çözerek verimsiz bir şekilde işi çoğalttı
- RN uzmanlığı kazanmak için zaman ve emek harcandı; hız önceliklendirilirken tutarlılıktan ödün vermeyi içeren bu takas bilinçli olarak kabul edildi
- 2023’ten sonra tüm uygulamalar olgunlaştıkça tutarlılık güçlendirilmeye başlandı
- Ortak bileşenler (örneğin Identity, gerçek zamanlı izleme, performans ölçümü vb.) paylaşılan kütüphanelere çıkarıldı ve tüm uygulamalarda kullanılmaya başlandı
- Böylece ekipler, zaten çözülmüş sorunları yeniden ele almak yerine mevcut çözümleri kullanabildi
- 2025’te kod paylaşımı daha da genişletiliyor
- Ekipler arasında bilgi ve uzmanlık yayılıyor
- Paylaşılan bileşenlerdeki iyileştirmelerden tüm uygulamalar otomatik olarak yararlanıyor
- Mühendislik kaynakları korunarak kullanıcıya değer sunan işlere daha çok odaklanılıyor
React Native’in geleceği
- React Native’in (RN) geleceği parlak görünüyor; Meta da bu projenin iyi bir yöneticisi olarak düzenli iyileştirmeler sunuyor
- Her sürümde geliştirici geri bildiriminin yol haritasına güçlü biçimde yansıdığı görülüyor ve hızlı uygulamalar yapmanın giderek kolaylaşması bekleniyor
- Shopify, New Architecture’ı benimseyerek RN’in gelişimini desteklemeyi sürdürecek
- Microsoft, Amazon, Tesla, SpaceX ve Coinbase gibi pek çok büyük şirket RN kullanıyor; yüksek kaliteli üçüncü taraf kütüphane ve framework’ler de düzenli olarak yayımlanıyor
- Shopify, aşağıdaki çalışmalarla açık web, açık kaynak ve açık standartlar için katkı sunuyor
- RN’e kod katkıları
- RN sürümlerinde eş release captain rolü üstlenmek
- React Native Skia, Reanimated gibi yüksek etkili açık kaynak projelere destek vermek
- Flashlist, Restyle, Tophat gibi açık kaynak projeleri yayımlamak
- Ayrıca 2025’te React Native Working Group yeniden başlatıldı
- Amaç, RN’i destekleyen kuruluşların önde gelen isimlerini bir araya getirip ekosistemin temel sorunlarını belirlemek, yatırım önceliklerini saptamak, iş birliğini artırmak ve yinelenen çalışmaları azaltmak
- Önceki katılımcı şirketler: Meta, Twitter, Coinbase, Microsoft vb.
- Katılmak isteyenler iletişime geçebilir
- RN son 5 yılda büyük ilerleme kaydetti ve benimsenmesini zorlaştıran birçok sınırlama artık ortadan kalktı
- Bir süredir RN kullanmadıysanız, şimdi React Native’i yeniden denemek için doğru zaman
9 yorum
Benzer bir dönemde benzer nedenlerle RN’i kullanmaya başladık ve iyi kullanıyoruz.
Performans sorunları konusunda buna biraz katılmak zor, ama bu muhtemelen
react-domseviyesinde çözülmesi gereken bir meseledir.Az sayıda kişiyle çok iş yapılabilmesi bence en büyük avantaj.
RN’in Native API’siyle kapsanamayan hangi native işlevlerin olduğunu merak ediyorum.
Etkileyici bir deneyim paylaşımı. Şu anda işim gereği Kotlin kullanarak Android uygulaması geliştiriyorum ve bazen şunu düşünüyorum: Gerçekten native’e gitmek şart mı...? (Benim durumumda platformla yakın çalışması gereken şeyler olduğu için mecburen native’e gittim.) Mümkünse React Native ya da Flutter gibi cross-platform desteği olan bir yöne gitmek de iyi bir seçenek gibi görünüyor.
Shopify harika @.@
"100% React Native should be an anti-goal. It is great for building features just once, but is not the right technology for everything."
"Native mi yoksa React Native mi diye düşünmek yerine, native ve React Native diye düşünün."
Mühendislikte %100 diye bir şey yok ("kesinlikle A daha iyidir" türü başlık tuzaklarına dikkat).
Her birinin artıları ve eksileri var; duruma uygun araçlar bulunuyor.
Shopify ekibinin takım oluşturma felsefesini de görebildiğiniz için çok iyi bir yazı.
Yine de ben Flutter'ı övmeye devam edeceğim.
Tüm uygulamaları RN'e çevirmek... müthiş olmuş ya
@shopify/flash-list harika. Teşekkürler, Shopify.
Shopify, Ruby on Rails ekosisteminde de kilit bir rol oynuyor, RN ekosisteminde de gerçekten etkileyici bir ilerleyiş sergiliyor. Harika bir şirket.