21

Web ワーカーとメイン スレッド間で大量のデータ (数 MB) を渡す方法はありますか? 私は、ファイルをダウンロードし、それらを少し変更してから、何らかの方法でユーザーに変更されたファイルをダウンロードさせる必要があるプロジェクトで作業しています。Web ワーカーとメイン UI の間でデータを渡す次の方法を見つけました。

  1. 通常のpostMessage方法を使用します。
  2. 転送可能なオブジェクトの使用 (Chrome のみ)
  3. blob への URL 参照を作成し、その URL のみを送信します (Chrome でも動作しますが、他の環境でも動作しますか?)

(1)は小さいオブジェクトを送信する場合は問題ないと思いますが、シリアライズして JSON で送信するため、数 MB を超えるファイルを扱う場合は多くの時間とスペースが必要です。Chrome では、転送可能なオブジェクトを使用してデータを転送する方法が提供されており、データをコピーする必要はありません。残念ながら、これはこれまでのところ Chrome のみの機能であり、それ以外の場合は私の目的を果たしていました。

私が最後に見つけたのは、ワーカーから を使用して blob への URL を作成し、self.webkitURLその URL 参照を UI に渡すことだけでした。これはうまく機能します。ユーザーに URL を提供すると、ユーザーはファイルをダウンロードできます。残念ながら、Firefox でこれを行う方法が見つかりませんでした。可能ですか?

ワーカーとメインスレッドの間でデータを転送するために使用できる他の方法はありますか?

4

2 に答える 2

3

このWebWorkers チュートリアルによると、WebWorkers は File および Blob オブジェクト、および基本的に構造化された複製アルゴリズムで使用できるすべてのオブジェクトを渡すことをサポートするようになりました...または少なくとも Chrome はそれを行います。それが主な理由かどうかはわかりませんが、そうでないことを願っています。実際、この機能は他のブラウザーにも実装されています...ユーザーが選択したファイルをバックグラウンドで処理できるのは素晴らしいことです。

于 2012-10-08T23:11:43.087 に答える