4

私はクライアント側に Om を使用しており、アプリケーションの存続期間中、多くのコンポーネントがマウント/アンマウントされます。マウントすると、さまざまなチャネルが開かれます (go ブロック内)。また、IWillUnmount を使用してそれらを閉じることも計画しています。しかし、最初に私の質問は次のとおりです。閉鎖されていないチャネルはどうなりますか? 彼らが使用したリソースは解放されますか? (コンポーネントのアンマウント時に) チャネルを閉じないと、長期的にはブラウザのパフォーマンスが低下する可能性がありますか? ありがとう。

4

1 に答える 1

3

実装の大まかな読み取りに基づいて、閉じられていないチャネルは、ガベージ コレクションの対象となる場合、リソースを使用すべきではありません。つまり、送信者と受信者の両方がそれらへの参照を保持できない (またはコレクションの資格も持つ必要がある) ことを意味します。

チャネルを閉じるとは、バッファを空にし、バッファに何も追加できないようにチャネルを閉じたことを示すことだけです。バッファにメッセージがない場合、開いているチャネルは閉じているチャネルと同じリソースを使用します。

https://github.com/clojure/core.async/blob/master/src/main/clojure/cljs/core/async/impl/channels.cljs#L110

于 2014-08-09T18:16:49.537 に答える