Webワーカーのclose()メソッドとterminate()メソッドの違いを完全には理解していません。私はここで説明を読みました、そしてそれは同じことをしているようです?? http://www.w3.org/TR/workers/
どちらを使用するのですか?
close()
メソッドは、ワーカーのスコープ内で表示されます。 terminate()
メソッドはワーカーオブジェクトのインターフェイスの一部であり、「外部から」呼び出すことができます。
メインスクリプトでワーカーを作成し、そのスクリプトからワーカーを停止する場合は、ワーカーオブジェクトでterminate()
を呼び出す必要があります。 (外部メッセージへの応答などとして)ワーカーコードからワーカーを停止する場合は、close()
メソッドを呼び出す必要があります。
実際、close()関数はワーカーのスコープ内から表示されます。
terminate()は外部から可視です(つまり、ワーカーを呼び出すスクリプトは、この関数を使用してシャットダウンできます)
TBHこれは最初は少し混乱しますが、実装すると慣れます
終了よりもself.close()の良いユースケースを見つけました。 Webワーカーの内部には、オブジェクトの位置を受け取ってポストバックするsetInterval関数がありました。 terminateを使用するとWebワーカーが完全に強制終了されるため、playメッセージをワーカーに送信できませんでした。それを閉じている間、私はそれを再び開いてタイマーを再起動しました。
ReactでWebワーカーを使用する場合のその他の違い:
terminate
を使用する場合、APIを呼び出すだけで、synchronous
になります。close
を使用する場合は、postMessage
を呼び出してシグナル/メッセージを送信し、ワーカーがスコープ内で自分自身を強制終了できるようにする必要があります。 postMessage
は、私が知る限り、NOT
同期です。close
の問題は、コンポーネントをunmount
するときにワーカーを強制終了したい場合は、それを実行する必要があるsynchronously
です。それ以外の場合は、may
get警告、特にComponentWillUnmount
ライフサイクルフックまたはuseEffect
フック内のものをクリーンアップしようとした場合(そうでない場合、ゾンビWebワーカーインスタンスが複数存在します)。
警告は次のようになります。
Warning: Can't call setState (or forceUpdate) on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in the componentWillUnmount method.
または:
Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.