3

私の Web アプリでは、古い既存のオブジェクトに新しいスクリプトを渡す方法がないため、Worker オブジェクトを常に再インスタンス化する必要があります。しばらくすると、一部のブラウザーは新しい Worker オブジェクトの作成をブロックし始めます。これは、1 つのウィンドウの Worker の制限に達したためです。新しいワーカー オブジェクトを作成する前に、完成したワーカー オブジェクトを削除しようとしましたが、どうやらやり方が間違っているようです。Opera で失敗する簡単なテストを次に示します (ウィンドウあたりのワーカー数の上限は 256 です)。

var worker;    
for(var i = 0; i < 300; i++) {
  for (var key in worker) worker[key] = null;
  delete worker.onmessage;
  delete worker.onerror;
  delete worker;
  worker = new Worker("script.js");
}

私の質問は、ワーカー オブジェクトを完全に削除して、ブラウザーの制限に達することがないようにする方法です。ありがとうございました!

4

2 に答える 2

4

これが Web ワーカーで機能するかどうかはわかりません。ウィンドウ上にオブジェクトを作成しますか? もしそうなら、これを試すことができます:

delete window.worker

終了を呼び出してから削除しますか?

window.worker.terminate();
delete window.worker;

ドキュメントには、すべてを停止するが、terminate() が呼び出されたときにクリーンアップしないと記載されています。

于 2013-07-05T14:21:54.433 に答える
3

オブジェクトを削除するのではなく、ワーカーを終了する必要があります。オブジェクトを削除すると、ワーカーへのポインターが削除されます。私の経験では、OPEN ワーカーが多すぎると、プログラムが機能しなくなるという問題がありますが、self.close(); によって閉じられたワーカーに制限はありません。worker または worker.terminate(); で メインスクリプトで。ワーカーを正しく閉じている場合は、delete worker を使用する必要はありません。

于 2013-07-22T14:07:59.497 に答える