メモ化された fn があります。ここで、fn は 2 つの入力参照によってメモ化されています。
let NewRefCursor = memoized(
(deref, swap) => refToHash(deref) + refToHash(swap), // memoizer identity fn
(deref, swap) => new RefCursor(deref, swap)); // the function we are memoizing
私が必要とする行動はNewRefCursor(a, b) === NewRefCursor(a, b)
. a
またはb
がガベージ コレクションされると、カーソルもガベージ コレクションされる必要があります。
refToHash
ES6WeakMap
を使用するもう 1 つのメモ化された関数で、参照が引き続き GC に許可されるようにします。
NewRefCursor
キャッシュ ヒットを決定するために 2 つのパラメーターを使用するため、メモ化するのが非常に難しく、 と互換性がなくWeakMap
、参照が GC されるのを防ぐことができます。私は、入力オブジェクトにプライベート フィールドを追加したり、確率的なデータ構造を作成したりするなど、あらゆる種類の策略を受け入れます。このリークは解決する必要があります。私がこれまでに持っている唯一の解決策は、キャッシュ サイズを制限するパラメーターを memoize に追加し、そのパラメーターをアプリごとに調整することです。全体。