Transferable objects
Bellek kopyalamadan büyük veriyi worker'a transfer etmeyi öğrenirsin.
Transferable objects
Büyük veriyi worker'a gönderirken kopyalama pahalıdır. Transferable objects, belleği kopyalamadan bir taraftan diğerine aktarır; buna sıfır kopya (zero-copy) taşıma denir.
Başlıca transferable türleri ArrayBuffer, MessagePort ve ImageBitmap'tir. Aktarım sonrası veri gönderenin elinde artık kullanılamaz; sahiplik alana geçer. Bu yüzden aynı buffer'ı iki kez gönderemezsin.
Transfer list ayrıntısı
postMessage'in ikinci parametresi bir transfer list'tir: taşınacak nesnelerin dizisi. Bu listedeki her öğe kopyalanmadan alıcıya geçer.
worker.postMessage(buffer, [buffer]);Aktarımdan sonra buffer'ın byteLength özelliği sıfırlanır; eski referans artık boş bir kabuk olur. Aynı ArrayBuffer'ı tekrar göndermek TypeError fırlatır. Bu yüzden aktarımı tek seferde planlamak gerekir.
Uygulama ArrayBuffer'ı transfer et
buffer adında bir ArrayBuffer oluştur (16 bayt). Sonra worker.postMessage(buffer, [buffer]) çağrısıyla sahipliği devret.
Örnek çözümü göster
const buffer = new ArrayBuffer(16);
worker.postMessage(buffer, [buffer]);
Kendini test et
-
Transferable objects ne sağlar?
- Bellek kopyalamadan veri aktarımı
- Worker'a DOM erişimi
- İki worker arasında değişken paylaşımı
- Worker'ı otomatik kapatma
Cevabı göster
Bellek kopyalamadan veri aktarımı — Doğru! Transferable objects ile bellek kopyalanmadan sahiplik devredilir.
-
Buffer'ı transfer et
worker.postMessage(buffer, [____]);Cevabı göster
worker.postMessage(buffer, [buffer]); -
Transferable eşleşmeleri
- ArrayBuffer
- transferable tür
- [buffer]
- transfer listesi
- zero-copy
- kopyasız taşıma
- byteLength = 0
- aktarımdan sonra