JavaScript では、オブザーバー パターンが頻繁に使用されます。それには 1 つのトリッキーなことがあります。クリーンアップが必要です。通常のアプリケーションでは、次の経験則を使用します。
- 被験者の寿命が観察者よりも短い(または等しい)場合、私はただ行うことができます
subject.on('event', ...)
- 被験者の寿命が観察者よりも長い場合、使用する必要があります
observer.listenTo(subject, 'event', ...)
2 番目のケースでは、listenTo
はオブザーバーのライフサイクルを認識しており、オブザーバーが終了する時間になると自動的にリスナーを削除します。
常にアプリケーションの一部のみがアクティブな現代の SPA (Single Page Application) スタイルでは、これが非常に重要になります。これを、イベント ストリームの最適な候補であり、おそらく長寿命である Web ソケットと組み合わせると、これはさらに重要になります。
FRPでは、時間の経過とともに変化する値を表すイベントストリームのようなものを持っているので、私は(知らず知らずのうちに)多くのリスナーを作成しています。それぞれfilter
、map
およびflatMap
(おそらくリスナーを使用して) 前のストリームに結び付けられた新しいストリームを作成します。
私の考えでは、これらのリスナーをいつどのように削除する必要があるかを判断するのは非常に難しいようです。この問題について最初に考えたのが私だとは想像できませんが、インターネット上でこれについて多くを見つけることができませんでした。
他の言語のいくつかのフレームワークが弱参照を使用しているのを見てきました。JavaScript には弱参照の概念がありません (ここでは WeakMap は使用できません)。あったとしても、ガベージ コレクションがいつ行われるかが不明なので、それは悪い考えのように思えます。
- これは現在のフレームワークでどのように解決されていますか?
- フレームワークはオブジェクトのライフサイクルに結び付いていますか? はいの場合:どのように?