CodeBlanks Logo Icon CodeBlanks

Transferable objects

JavaScript kursu · Uzman · Ders 23/63

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

  1. 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.

  2. Buffer'ı transfer et

    worker.postMessage(buffer, [____]);
    Cevabı göster
    worker.postMessage(buffer, [buffer]);
  3. Transferable eşleşmeleri

    ArrayBuffer
    transferable tür
    [buffer]
    transfer listesi
    zero-copy
    kopyasız taşıma
    byteLength = 0
    aktarımdan sonra

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