32 puan yazan xguru 2025-01-20 | 9 yorum | WhatsApp'ta paylaş
  • 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

 
firea32 2025-02-03

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-dom seviyesinde çözülmesi gereken bir meseledir.
Az sayıda kişiyle çok iş yapılabilmesi bence en büyük avantaj.

 
wkang586 2025-01-28

RN’in Native API’siyle kapsanamayan hangi native işlevlerin olduğunu merak ediyorum.

 
tsboard 2025-01-23

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.

 
techtech 2025-01-23

Shopify harika @.@

 
felizgeek 2025-01-21

"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ı.

 
treestae 2025-01-21

Yine de ben Flutter'ı övmeye devam edeceğim.

 
mhj5730 2025-01-20

Tüm uygulamaları RN'e çevirmek... müthiş olmuş ya

 
genog 2025-01-20

@shopify/flash-list harika. Teşekkürler, Shopify.

 
eajrezz 2025-01-20

Shopify, Ruby on Rails ekosisteminde de kilit bir rol oynuyor, RN ekosisteminde de gerçekten etkileyici bir ilerleyiş sergiliyor. Harika bir şirket.