diff --git a/packages/core/src/utils/lru-map.ts b/packages/core/src/utils/lru-map.ts index f89b0c59..849cc2d4 100644 --- a/packages/core/src/utils/lru-map.ts +++ b/packages/core/src/utils/lru-map.ts @@ -96,6 +96,22 @@ export class LruMap { return this._has(key) } + private _remove(item: TwoWayLinkedList): void { + if (item.p) { + this._last = item.p + this._last.n = undefined + } else { + // exhausted + this._last = undefined + this._first = undefined + } + + // remove strong refs to and from the item + item.p = item.n = undefined + this._del(item.k) + this._size -= 1 + } + set(key: K, value: V): void { let item = this._get(key) @@ -110,6 +126,9 @@ export class LruMap { item = { k: key, v: value, + // for jit to optimize stuff + n: undefined, + p: undefined, } this._set(key, item as any) @@ -129,24 +148,13 @@ export class LruMap { const oldest = this._last if (oldest) { - if (oldest.p) { - this._last = oldest.p - this._last.n = undefined - } else { - // exhausted - this._last = undefined - this._first = undefined - } - - // remove strong refs to and from the item - oldest.p = oldest.n = undefined - this._del(oldest.k) - this._size -= 1 + this._remove(oldest) } } } delete(key: K): void { - this._del(key) + const item = this._get(key) + if (item) this._remove(item) } }