CodeBlanks Logo Icon CodeBlanks

Meydan okuma - Worker mimarisi

JavaScript kursu · Uzman · Ders 60/63

Web Workers ve transferable objects ile büyük bir hesabı arka plan dizisinde yaparsın.

Worker ile arka plan hesabı

Bu meydan okumada ağır bir hesabı ana diziden ayrı tutarak Web Worker ile arka plan dizisinde çalıştıracaksın. Önce new Worker('worker.js') ile bir işçi oluşturursun.

Ana diziden veri göndermek için worker.postMessage(data) çağrısı yaparsın; transferable bir nesne gönderdiğinde ikinci argüman olarak [buffer] dizisi verirsin ve arabellek kopyalanmadan aktarılır.

İşçiden gelen mesajı worker.onmessage ile yakalarsın; event.data işçinin gönderdiği sonucu taşır.

Uygulama Worker ile arka plan hesabı

Bir Worker oluştur: new Worker('worker.js'). Sonra worker.onmessage'a bir işleyici ata ve gelen veriyi event.data ile yakala. Son olarak worker.postMessage(data, [buffer]) çağrısı yap: ilk argüman veri, ikincisi transfer edilecek arabellek listesi olsun.

Örnek çözümü göster
1 }, [buffer]); çağrısı ekle.

Örnek çözüm:
const worker = new Worker('worker.js');

worker.onmessage = function(event) {
  console.log(event.data);
};

const buffer = new ArrayBuffer(8);
worker.postMessage({ payload: 1 }, [buffer]);

Kendini test et

  1. postMessage'de transfer listesi ne işe yarar?

    worker.postMessage(data, [buffer]);
    • Veriyi sıkıştırır
    • Arabelleği kopyalamadan aktarır
    • Mesajı geciktirir
    • İşçiyi yeniden başlatır
    Cevabı göster

    Arabelleği kopyalamadan aktarır — Doğru! Transfer listesi arabelleği kopyasız taşır; bu büyük verilerde hem hız hem bellek kazancı sağlar.

  2. onmessage atamasını tamamla

    const worker = new Worker('worker.js');
    worker.____ = function(event) {
      console.log(event.data);
    };
    Cevabı göster
    const worker = new Worker('worker.js');
    worker.onmessage = function(event) {
      console.log(event.data);
    };
  3. Worker kavramlarını eşleştir

    new Worker(url)
    İşçi oluştur
    postMessage(data)
    Veri gönder
    onmessage
    Mesaj yakala
    event.data
    Gelen sonuç

Uzman bölümündeki tüm dersler