Meydan okuma - Worker mimarisi
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
-
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.
-
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); }; -
Worker kavramlarını eşleştir
- new Worker(url)
- İşçi oluştur
- postMessage(data)
- Veri gönder
- onmessage
- Mesaj yakala
- event.data
- Gelen sonuç