1

WebWorker からメイン スレッドに戻す必要がある配列があります。私の知る限り、転送可能なのは ArrayBuffers と TypedArrays だけで、それ以外は転送ではなくコピーされます。

私が抱えている問題は、配列にオブジェクトが含まれているため、それらを転送する方法がわかりません(サイズが大きいために必要です)。

たとえば、私が持っていると仮定します:

function something() {
    this.x = 1;
    this.y = 2;
    this.z = 3;
}

var array = [];
for (var x = 0; x < 6; x++) {
    array[x] = new something();
}

配列を ArrayBuffer に変換し、転送してから元に戻す方法はありますか?

助けてくれてありがとう!

4

1 に答える 1

0

オブジェクトが作成されたときに、配列の各要素 (オブジェクト?) を投稿することを検討してください。次に、onmessage ハンドラーの配列に入れます。

function something() {
    this.x = 1;
    this.y = 2;
    this.z = 3;
}

var array = [];
for (var x = 0; x < 6; x++) {
    postMessage(new something());
}

これは、サンプルのような単純なオブジェクトで機能するはずですが、境界をテストする必要があります。

メイン ページとワーカーの間で渡されるデータはコピーされ、共有されません。オブジェクトはワーカーに渡されるときにシリアル化され、その後反対側で逆シリアル化されます。ページとワーカーは同じインスタンスを共有しないため、最終的には両端に複製が作成されます。ほとんどのブラウザーは、この機能を構造化クローンとして実装しています。

MDN: データの受け渡し

于 2013-06-06T02:28:42.283 に答える