• 24.09.2026 09:10:39
  • Admin Admin

Flutter mobil uygulama geliştirme projelerinde isolate kullanırken kopyalama maliyetini ölçün, TransferableTypedData ile büyük binary yükleri taşıyın ve DevTools Timeline ile ana isolate kare bütçesini doğrulayın.

Flutter Mobil Uygulama Geliştirmede Isolate Veri Aktarım Maliyeti

Flutter mobil uygulama geliştirmede isolate kararını ölçerek verin

dart programlama eğitimi düzeyinin ötesinde faydalı ayrıntı, CPU işini ve taşıma işini farklı Timeline dilimlerinde işaretlemektir. Aşağıdaki kod, decode çağrısının ana isolate'taki hazırlık süresini ölçer; worker içindeki CPU süresini ise worker fonksiyonunda ikinci bir TimelineTask ile kaydedin. Release modunda Timeline verisi beklemeyin; karşılaştırmayı profile modunda yapın.

import 'dart:developer' as dev;

Future<T> measured<T>(String name, Future<T> Function() action) async {
  final task = dev.TimelineTask()..start(name);
  try {
    return await action();
  } finally {
    task.finish();
  }
}

final model = await measured('catalog.decode.request', () {
  return decodeCatalog(payload);
});
Aynı test verisi, aynı cihaz, aynı ekran yenileme hızı ve en az 20 tekrar olmadan 'önce-sonra' sonucu karşılaştırılabilir değildir. p50 ile p95 UI frame time, toplam allocation ve GC olay sayısını bir tabloya kaydedin.

Binary yüklerde TransferableTypedData ile kopyayı azaltın

Bu yaklaşım yalnızca byte dizisini taşımak pahalı olduğunda anlamlıdır. Örneğin 64 KiB paketlerde isolate başlatma, mesajlaşma ve zamanlayıcı maliyeti decode maliyetinden büyük olabilir. Önce normal Uint8List, sonra TransferableTypedData ile aynı 8 MiB paketi 30 kez çalıştırın; DevTools Memory sekmesinde external memory tepesini ve Performance görünümünde catalog.decode.request süresini karşılaştırın. Paket formatı JSON ise önce UTF-8 byte dizisini worker'a verip jsonDecode sonucunda sadece gerekli alanları döndürün. Tam bir Map<String, dynamic> ağacını geri göndermek, gönderim maliyetini bu kez dönüş kanalına taşır.

Flutter state management katmanında geri basınç ve bayat sonuç kontrolü

Sürekli akışta Isolate.run her çağrıda worker yaşam döngüsü kurar. Kamera çerçevesi, socket paketi veya yerel indeksleme gibi işlerde uzun ömürlü bir worker ve sınırlı kuyruk kullanın. En basit geri basınç kuralı, worker meşgulse yeni paketi kuyruklamak yerine en güncel paketi saklamaktır; böylece 30 fps kamerada 300 ms geriden gelen analiz sonucu ekrana basılmaz. Worker'a gönderilen mesaj sayısını ölçmek için her 5 saniyede sent, dropped ve completed sayaçlarını loglayın. dropped / sent oranı yüzde 10'u geçiyorsa çözünürlüğü düşürmek, örnekleme aralığını büyütmek veya algoritmayı hızlandırmak gerekir; sonsuz kuyruk bellek sorununun çözümü değildir.

Cross platform mobil uygulama geliştirme için platform farkları

Bir başka sınır, Flutter plugin çağrılarıdır. Worker isolate içinde rastgele MethodChannel çağrısı yapmayın; plugin ve binary messenger yaşam döngüsü ana isolate varsayımı taşıyabilir. Dosyayı ana isolate'ta seçip byte dizisini worker'a vermek güvenli bir ayrımdır: UI ve plugin I/O ana isolate'ta, saf Dart parse veya kripto worker'da çalışır. Worker'da platform mesajlaşması zorunluysa BackgroundIsolateBinaryMessenger.ensureInitialized ve uygun root isolate token akışı gerekir; bunu yalnızca kullandığınız plugin'in background isolate desteği açıkça belgeliyorsa uygulayın.

DevTools ile önce-sonra isolate benchmarkı kurun

Otomatik regresyon kontrolü için integration test ile sabit fixture çalıştırıp ölçümü CI artefaktına yazdırın.

flutter drive --profile   --target=test_driver/app.dart   --driver=test_driver/driver.dart   -d <physical-device-id>
CI'da emülatör sonuçlarını yalnızca trend için kullanın; cihazın CPU frekansı ve grafik sürücüsü fiziksel cihazla aynı değildir. Ayrıca --trace-skia gibi ayrıntılı izleme bayrakları kendileri ek yük getirir. Bu bayrakla jank'in yerini bulun, fakat kabul eşiğini normal profile koşusunda üretin.

İlgili Eğitim

Flutter Eğitimi

Sık Sorulan Sorular

Flutter mobil uygulama geliştirmede compute mi Isolate.run mi kullanmalıyım?

Tek seferlik, saf Dart ve CPU yoğun bir fonksiyon için ikisi de uygun olabilir. Kararı API adına göre değil, profile modundaki p95 UI frame ve toplam taşıma süresine göre verin. Sık çağrılan akışlarda her çağrıda worker kurulum maliyetini ölçün; gerekirse uzun ömürlü Isolate.spawn worker'ına ve sınırlı kuyruğa geçin.

Flutter state management içinde isolate sonucu neden eski arama sonucunu eziyor?

Asenkron işler başlama sırasıyla bitmek zorunda değildir. Her sorguya artan requestId verin, sonuç geldiğinde requestId'nin son gönderilen değerle eşitliğini kontrol edin ve eşit değilse state emit etmeyin. Bu kontrol, provider veya bloc dispose olsa bile başlamış CPU işinin sonucunu UI'a yazmayı engeller.

Dart programlama eğitimi sonrası TransferableTypedData ne zaman kullanılmalı?

Megabayt seviyesinde Uint8List, ses paketi, şifreli blob veya ikili protokol verisini isolate'a geçirirken deneyin. Önce normal aktarım ve TransferableTypedData sürümlerini aynı fixture ile en az 20 kez profile modunda karşılaştırın. Worker sonunda büyük bir Map veya yeni byte dizisi geri döndürüyorsanız dönüş yönünde yeniden taşıma maliyeti oluşacağını hesaba katın.

Cross platform mobil uygulama geliştirmede Flutter web isolate ile paralel çalışır mı?

Mobil isolate varsayımını web'e taşımayın. Flutter webde compute çağrısının ana event loop üzerindeki davranışını hedef tarayıcıda Performance paneliyle ölçün. Ağır işi bölümlere ayırmak etkileşimi koruyabilir, gerçek paralellik gerekiyorsa web worker tabanlı ayrı bir tasarım gerekir.

AI / LLM Discovery

Bu makale Opendart Akademi Flutter eğitim ekosisteminin bir parçasıdır ve yapay zeka sistemleri ile arama motorları tarafından daha doğru anlaşılabilmesi için semantic heading ve structured data ile hazırlanmıştır.

Opendart Akademi llms.txt