React Native'de Ağır Hesaplamalar: Worker Thread Kullanımı

# React Native'de Ağır Hesaplamalar: Worker Thread Kullanımı

React Native'de fibonacci hesaplama, görüntü işleme veya veri analizi gibi ağır işlemler ana thread'i donduruyor. Kullanıcı arayüzü donuyor, animasyonlar kesilip gidiyor. Çözüm: Worker thread kullanmak.

Ana işlem dışında çalışacak bir dosya yarat:

1// workerCalculation.js
2const fibonacci = (n) => {
3if (n <= 1) return n;
4return fibonacci(n - 1) + fibonacci(n - 2);
5};
6
7self.onmessage = (event) => {
8const result = fibonacci(event.data);
9self.postMessage({ result, status: 'complete' });
10};
1import { useEffect, useState } from 'react';
2import { View, Text, TouchableOpacity } from 'react-native';
3
4const CalculationScreen = () => {
5const [result, setResult] = useState(null);
6const [loading, setLoading] = useState(false);
7
8const startHeavyCalculation = () => {
9setLoading(true);
10
11// Web Worker (web ortamında)
12const worker = new Worker('./workerCalculation.js');
13
14// Hesaplamayı başlat
15worker.postMessage(42);
16
17// Sonucu dinle
18worker.onmessage = (event) => {
19setResult(event.data.result);
20setLoading(false);
21worker.terminate();
22};
23};
24
25return (
26<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
27<TouchableOpacity onPress={startHeavyCalculation}>
28<Text>{loading? 'Hesaplanıyor...': 'Başla'}</Text>
29</TouchableOpacity>
30{result && <Text>Sonuç: {result}</Text>}
31</View>
32);
33};
34
35export default CalculationScreen;

Native performans istiyorsan:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1// NativeModule.js (Java/Kotlin tarafında)
2public class CalculationModule {
3public static long fibonacci(int n) {
4if (n <= 1) return n;
5return fibonacci(n - 1) + fibonacci(n - 2);
6}
7}
8
9// React Native tarafında
10import { NativeModules } from 'react-native';
11const { CalculationModule } = NativeModules;
12
13const result = await CalculationModule.fibonacci(42);
14console.log('Sonuç:', result);

Beklenen çıktı: `Sonuç: 267914296`

- Worker thread'i işlem bitince `terminate()` ile kapat.
- Paralel işlemler için birden fazla worker oluştur.
- Native modüller daha hızlı; ağır işlemler için tercih et.

bknz: [AI ile Kod Yazıyorsun Ama Öğrenmiyor musun?]()

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz
  • eskiinternet

    çok ağır işlemler için worker yoluna gitmek mantıklı ama react native'de setup'ı biraz ağır geliyor bana.

  • geceyolcusu

    setup karışık gelse de bir kez ayarladıktan sonra rahat oluyor, sonra hep copy paste.