Tüm Yazılar
KategoriCross-Platform
Okuma Süresi
20 dk
Yayın Tarihi
...
Kelime Sayısı
2.276kelime

Kahveni hazırla - bu içerikli bir makale!

React Native ve Flutter'ı mimari, performans, geliştirici deneyimi, ekosistem ve iş piyasası açısından derinlemesine karşılaştırın.

React Native vs Flutter 2024: Kapsamlı Karşılaştırma Rehberi

Cross-platform mobil geliştirmede iki dev rakip: React Native ve Flutter. Her ikisi de milyonlarca geliştiricinin tercihi ama temelden farklı yaklaşımlar sunuyorlar. Bu rehberde, her iki framework'ü derinlemesine karşılaştırarak projen için doğru seçimi yapmanı sağlayacağız.

💡 Hızlı Not: Bu karşılaştırma 2024 güncel verileriyle hazırlandı. Her iki framework de hızla gelişiyor — 6 ay sonra bazı bilgiler değişmiş olabilir.

İçindekiler

  1. Mimari Karşılaştırma
  2. Performance Benchmarks
  3. UI Rendering Yaklaşımları
  4. Geliştirici Deneyimi (DX)
  5. Ekosistem ve Kütüphaneler
  6. Öğrenme Eğrisi
  7. İş Piyasası ve Kariyer
  8. Şirket Case Study'leri
  9. Ne Zaman Hangisi?
  10. Geleceğe Bakış

Mimari Karşılaştırma {#mimari}

Özellik
React Native
Flutter
Dil
JavaScript/TypeScript
Dart
Rendering
Native bileşenler (bridge)
Kendi render engine (Skia/Impeller)
Mimari
Bridge → JSI (New Architecture)
Compilation → Native ARM
Hot Reload
✅ Fast Refresh
✅ Hot Reload
Compilation
JIT (dev) + Hermes
JIT (dev) + AOT (release)
State Management
Redux, MobX, Zustand
BLoC, Riverpod, Provider

React Native Mimarisi (New Architecture)

swift
1JavaScript Thread → JSI → Fabric Renderer → Native Views
2
3 Turbo Modules → Native APIs

Flutter Mimarisi

swift
1Dart Code → Dart Runtime → Impeller/Skia → GPU → Screen
2
3 Platform Channels → Native APIs

Performance Benchmarks {#performance}

Metrik
React Native
Flutter
Native
Startup (cold)
~800ms
~600ms
~300ms
Frame rate (complex UI)
55-60fps
58-60fps
60fps
Memory (idle)
~80MB
~60MB
~40MB
App size (min)
~10MB
~8MB
~3MB
JavaScript bridge overhead
~1-5ms
N/A
N/A
List scroll (10K items)
Smooth
Smooth
Smooth
⚠️ Bu değerler ortalamadır ve uygulamanın karmaşıklığına göre değişir.

UI Rendering Yaklaşımları {#rendering}

React Native: Platform'un native UI bileşenlerini kullanır. <View> → UIView, <Text> → UILabel. Bu, platforma özgü görünüm sağlar ama iOS ve Android arasında pixel-perfect tutarlılık zordur.

Flutter: Kendi pixel'lerini çizer (Skia/Impeller engine). Tüm platformlarda birebir aynı görünüm. Material Design ve Cupertino widget'ları ile platform-adaptive UI mümkün.

dart
1// Flutter - Platform-adaptive widget
2Widget build(BuildContext context) {
3 if (Platform.isIOS) {
4 return CupertinoNavigationBar(middle: Text('Başlık'));
5 }
6 return AppBar(title: Text('Başlık'));
7}

Geliştirici Deneyimi (DX) {#developer-experience}

DX Özelliği
React Native
Flutter
IDE desteği
VS Code, WebStorm
VS Code, Android Studio, IntelliJ
Hot Reload kalitesi
⭐⭐⭐⭐
⭐⭐⭐⭐⭐
Debugging
Chrome DevTools
Dart DevTools
Profiling
Flipper, React DevTools
Flutter DevTools
Test framework
Jest, Detox
flutter_test, integration_test
Documentation
⭐⭐⭐
⭐⭐⭐⭐⭐

Ekosistem ve Kütüphaneler {#ekosistem}

React Native avantajları:

  • npm ekosistemi (2M+ paket)
  • Web geliştiricileri geçiş kolaylığı
  • Expo ile hızlı başlangıç

Flutter avantajları:

  • pub.dev (40K+ paket)
  • Widget kataloğu zengin
  • Firebase entegrasyonu mükemmel
  • Web, desktop, embedded desteği

Öğrenme Eğrisi {#ogrenme}

Profil
React Native
Flutter
Web developer (JS/TS)
⭐⭐ (kolay)
⭐⭐⭐ (Dart öğren)
iOS developer (Swift)
⭐⭐⭐ (JS öğren)
⭐⭐⭐ (Dart öğren)
Sıfırdan başlayan
⭐⭐⭐
⭐⭐ (daha kolay)

İş Piyasası ve Kariyer {#is-piyasasi}

Her iki framework de güçlü iş piyasasına sahip. React Native daha uzun süredir var (2015) ve daha geniş bir topluluğu var. Flutter hızla büyüyor (2018) ve özellikle startup'larda popüler.

Şirket Case Study'leri {#case-studies}

React Native kullananlar: Meta, Instagram, Shopify, Discord, Coinbase, Bloomberg

Flutter kullananlar: Google, BMW, Alibaba, eBay, Toyota, Nubank, Grab

Ne Zaman Hangisi? {#karar}

React Native tercih et:

  • Ekibin JavaScript/TypeScript biliyor
  • Web + mobil kod paylaşımı önemli
  • Mevcut React web projesi var
  • Native UI görünümü istiyorsun

Flutter tercih et:

  • Pixel-perfect tasarım kontrolü lazım
  • iOS + Android + Web + Desktop hedefi
  • Startup — hızlı MVP
  • Custom UI yoğun uygulama

Kod Örnekleri: Aynı Ekran, İki Framework {#kod-ornekleri}

Aynı kullanıcı listesi ekranını hem React Native hem Flutter ile yazalım — farkı somut olarak gör:

React Native ile Kullanıcı Listesi

typescript
1// React Native - UserListScreen.tsx
2import React, { useState, useEffect } from 'react';
3import { View, Text, FlatList, StyleSheet, ActivityIndicator, Image, TouchableOpacity } from 'react-native';
4 
5interface User {
6 id: string;
7 name: string;
8 email: string;
9 avatar: string;
10 role: 'admin' | 'user' | 'moderator';
11}
12 
13const UserListScreen: React.FC = () => {
14 const [users, setUsers] = useState([]);
15 const [loading, setLoading] = useState(true);
16 const [refreshing, setRefreshing] = useState(false);
17 
18 const fetchUsers = async () => {
19 try {
20 const response = await fetch('https://api.example.com/users');
21 const data: User[] = await response.json();
22 setUsers(data);
23 } catch (error) {
24 console.error('Fetch error:', error);
25 } finally {
26 setLoading(false);
27 setRefreshing(false);
28 }
29 };
30 
31 useEffect(() => { fetchUsers(); }, []);
32 
33 const renderItem = ({ item }: { item: User }) => (
34
35
36
37 {item.name}
38 {item.email}
39
40 {item.role}
41
42
43
44 );
45 
46 if (loading) return ;
47 
48 return (
49
50 data={users}
51 keyExtractor={(item) => item.id}
52 renderItem={renderItem}
53 onRefresh={() => { setRefreshing(true); fetchUsers(); }}
54 refreshing={refreshing}
55 />
56 );
57};
58 
59const styles = StyleSheet.create({
60 card: { flexDirection: 'row', padding: 16, borderBottomWidth: 1, borderColor: '#e5e7eb' },
61 avatar: { width: 48, height: 48, borderRadius: 24 },
62 info: { marginLeft: 12, flex: 1 },
63 name: { fontSize: 16, fontWeight: '600' },
64 email: { fontSize: 14, color: '#6b7280' },
65 badge: { alignSelf: 'flex-start', paddingHorizontal: 8, paddingVertical: 2, borderRadius: 12, marginTop: 4 },
66 badgeText: { color: 'white', fontSize: 12, fontWeight: '500' },
67});

Flutter ile Aynı Ekran

dart
1// Flutter - user_list_screen.dart
2import 'dart:convert';
3import 'package:flutter/material.dart';
4import 'package:http/http.dart' as http;
5 
6class User {
7 final String id, name, email, avatar, role;
8 User({required this.id, required this.name, required this.email, required this.avatar, required this.role});
9 
10 factory User.fromJson(Map json) => User(
11 id: json['id'], name: json['name'], email: json['email'],
12 avatar: json['avatar'], role: json['role'],
13 );
14}
15 
16class UserListScreen extends StatefulWidget {
17 const UserListScreen({super.key});
18 @override State createState() => _UserListScreenState();
19}
20 
21class _UserListScreenState extends State {
22 List users = [];
23 bool loading = true;
24 
25 @override
26 void initState() {
27 super.initState();
28 fetchUsers();
29 }
30 
31 Future fetchUsers() async {
32 try {
33 final response = await http.get(Uri.parse('https://api.example.com/users'));
34 final List data = jsonDecode(response.body);
35 setState(() {
36 users = data.map((json) => User.fromJson(json)).toList();
37 loading = false;
38 });
39 } catch (e) {
40 setState(() => loading = false);
41 }
42 }
43 
44 @override
45 Widget build(BuildContext context) {
46 if (loading) return const Center(child: CircularProgressIndicator());
47 
48 return RefreshIndicator(
49 onRefresh: fetchUsers,
50 child: ListView.builder(
51 itemCount: users.length,
52 itemBuilder: (context, index) {
53 final user = users[index];
54 return ListTile(
55 leading: CircleAvatar(backgroundImage: NetworkImage(user.avatar)),
56 title: Text(user.name, style: const TextStyle(fontWeight: FontWeight.w600)),
57 subtitle: Column(
58 crossAxisAlignment: CrossAxisAlignment.start,
59 children: [
60 Text(user.email, style: TextStyle(color: Colors.grey[600])),
61 const SizedBox(height: 4),
62 Container(
63 padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2),
64 decoration: BoxDecoration(
65 color: user.role == 'admin' ? Colors.red : Colors.blue,
66 borderRadius: BorderRadius.circular(12),
67 ),
68 child: Text(user.role, style: const TextStyle(color: Colors.white, fontSize: 12)),
69 ),
70 ],
71 ),
72 );
73 },
74 ),
75 );
76 }
77}

Kod Karşılaştırma Tablosu

Kriter
React Native
Flutter
Satır sayısı
~65 satır
~70 satır
Stil yönetimi
StyleSheet (CSS benzeri)
Widget tree (inline)
Tip güvenliği
TypeScript ile
Dart ile (native)
Liste bileşeni
FlatList (virtualized)
ListView.builder (lazy)
State yönetimi
useState hook
setState method
Ağ isteği
fetch (built-in)
http package (external)
Görüntü yükleme
Image (built-in)
NetworkImage (built-in)

Migration Stratejileri {#migration}

Mevcut bir native uygulamadan cross-platform'a geçiş düşünüyorsan, dikkat edilmesi gereken adımlar:

Native'den React Native'e Geçiş

  1. Brownfield yaklaşımı — React Native modüllerini mevcut native app'e ekle
  2. Ekran ekran geçiş — en basit ekranlardan başla (Settings, About, Profile)
  3. Navigation bridge — native navigation stack ile React Native ekranları entegre et
  4. Native Modules — React Native'den erişilemeyen özellikler için native bridge yaz

Native'den Flutter'a Geçiş

  1. Add-to-app — Flutter modülünü mevcut iOS/Android projesine ekle
  2. FlutterEngine warming — engine'i önceden başlat, geçiş süresini kısalt
  3. Platform Channel — mevcut native kodu Flutter'dan çağır
  4. Kademeli geçiş — yeni özellikler Flutter'da, eski özellikler native'de kalsın

Geçiş Süresi Tahmini

Proje Büyüklüğü
Native → RN
Native → Flutter
Küçük (10-20 ekran)
2-3 ay
2-3 ay
Orta (30-50 ekran)
4-6 ay
3-5 ay
Büyük (100+ ekran)
8-12 ay
6-10 ay
⚠️ Bu süreler tam yeniden yazım içindir. Brownfield yaklaşımla kademeli geçiş daha uzun sürer ama risk çok daha düşüktür.

Gerçek Dünya Case Study'leri {#case-studies-detail}

Shopify — React Native Başarı Hikayesi

Shopify, 2020'de mobil geliştirmesini React Native'e taşıdı. Sonuçlar:

  • Geliştirme hızı %2x arttı: — aynı ekip iOS ve Android'e deploy ediyor
  • Kod paylaşımı %95: — platform-specific kod sadece %5
  • Crash rate %50 düştü: — unified codebase, daha az hata
  • Ancak performans-kritik bölümler (ödeme, kamera) hala native

BMW — Flutter ile Dijital Dönüşüm

BMW, My BMW uygulamasını Flutter ile yeniden yazdı:

  • 50+ ekran: tek codebase'de
  • 3 platform: — iOS, Android, ve araç içi infotainment
  • Geliştirme süresi %40 kısaldı
  • Custom rendering sayesinde marka tutarlılığı pixel-perfect

Nubank — Flutter ile 100M+ Kullanıcı

Brezilya'nın en büyük dijital bankası Nubank:

  • 150M+ indirme: Flutter uygulamasıyla
  • 700+ Flutter geliştiricisi: tek codebase'de çalışıyor
  • Performans-kritik finans uygulamasında Flutter'ın yeterliliğini kanıtladı
  • Custom design system ile tutarlı UX

Discord — React Native'den Native'e Dönüş

Dikkat çekici bir ters örnek — Discord, iOS uygulamasını React Native'den native Swift'e geri taşıdı:

  • Startup süresi %2x iyileşti
  • Memory kullanımı %50 düştü
  • Karmaşık real-time özelliklerde native performans farkı belirgin
Bu, her projenin farklı olduğunu ve cross-platform'un her zaman doğru cevap olmadığını gösterir.

Detaylı Ekosistem Karşılaştırması {#ekosistem-detay}

Kategori
React Native
Flutter
**State Yönetimi**
Redux, Zustand, MobX, Jotai, Recoil
BLoC, Riverpod, Provider, GetX
**Navigation**
React Navigation, Expo Router
go_router, auto_route
**HTTP Client**
Axios, fetch, React Query
Dio, http, Chopper
**Local Storage**
AsyncStorage, MMKV, WatermelonDB
Hive, Isar, SharedPreferences
**Animasyon**
Reanimated, Lottie, Moti
Implicit/Explicit widgets, Rive
**Form**
React Hook Form, Formik
flutter_form_builder
**Harita**
react-native-maps
google_maps_flutter
**Push**
react-native-firebase
firebase_messaging
**Test**
Jest, Detox, Maestro
flutter_test, integration_test
**CI/CD**
EAS Build, Fastlane
Codemagic, Fastlane

Performans Optimizasyon Teknikleri {#perf-optimization}

React Native Performans İpuçları

  1. Hermes engine — JavaScript yerine optimized bytecode, startup %50 hızlanır
  2. FlatList optimizasyonugetItemLayout, windowSize, maxToRenderPerBatch ayarları
  3. useMemo/useCallback — gereksiz re-render'ları önle
  4. Native driver — animasyonları JS thread'den native thread'e taşı
  5. New Architecture — JSI ile doğrudan native çağrı, bridge overhead sıfır

Flutter Performans İpuçları

  1. const constructor — widget rebuild'i minimize et
  2. RepaintBoundary — gereksiz paint işlemlerini izole et
  3. ListView.builder — lazy rendering ile büyük listelerde bellek tasarrufu
  4. Impeller engine — Skia yerine Impeller ile shader compilation jank yok
  5. Isolate — ağır hesaplamaları ayrı thread'de çalıştır

Geleceğe Bakış {#gelecek}

Her iki framework de aktif geliştirme altında. React Native'in New Architecture (JSI, Fabric, Turbo Modules) performans farkını kapatıyor. Flutter'ın Impeller engine'i ve multi-platform desteği genişliyor.

2024 ve Sonrası Trendler

Trend
React Native
Flutter
Web desteği
React Native Web (stabil)
Flutter Web (stabil)
Desktop
Microsoft Windows (deneysel)
macOS, Windows, Linux (stabil)
Server rendering
RSC (React Server Components)
N/A
AI/ML entegrasyonu
TensorFlow.js
TFLite, ML Kit
Wearable
Limitli
Wear OS desteği

React Native'in en büyük avantajı React ekosistemine erişim — RSC ve server-driven UI gelecekte mobilde de etkili olabilir. Flutter ise multi-platform vizyonuyla masaüstü ve embedded sistemlere yayılmaya devam ediyor.

Easter Egg

Gizli bir bilgi buldun!

Bu bölümde gizli bir bilgi var. Keşfetmek ister misin?

ALTIN İPUCU

Bu yazının en değerli bilgisi

Bu ipucu, yazının en önemli çıkarımını içeriyor.

Okuyucu Ödülü

Tebrikler! Bu yazıyı sonuna kadar okuduğun için sana özel bir hediyem var: **Kaynaklar:** - [React Native Documentation](https://reactnative.dev/) - [Flutter Documentation](https://flutter.dev/) - [State of Mobile Development 2024](https://www.jetbrains.com/lp/devecosystem-2024/)

Etiketler

#react-native#flutter#cross-platform#comparison#dart#javascript#mobile
Muhittin Çamdalı

Muhittin Çamdalı

Senior iOS Developer

12+ yıllık deneyime sahip iOS Developer. Swift, SwiftUI ve modern iOS mimarileri konusunda uzman. Apple platformlarında performanslı ve kullanıcı dostu uygulamalar geliştiriyorum.

iOS Geliştirme Haberleri

Haftalık Swift tips, SwiftUI tricks ve iOS best practices. Spam yok, sadece değerli içerik.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.

Paylaş

Bunu da begenebilirsiniz