Add performance note about prism scopes

This commit is contained in:
Aria Minaei 2022-11-26 23:29:19 +01:00
parent 83832ef85b
commit 0655e5b1c4

View file

@ -106,20 +106,20 @@ export class PrismDerivation<V> extends AbstractDerivation<V> {
class PrismScope { class PrismScope {
isPrismScope = true isPrismScope = true
private _subs: Record<string, PrismScope> = {}
// NOTE probably not a great idea to eager-allocate all of these objects/maps for every scope,
// especially because most wouldn't get used in the majority of cases. However, back when these
// were stored on weakmaps, they were uncomfortable to inspect in the debugger.
readonly subs: Record<string, PrismScope> = {}
readonly effects: Map<string, IEffect> = new Map() readonly effects: Map<string, IEffect> = new Map()
readonly memos: Map<string, IMemo> = new Map() readonly memos: Map<string, IMemo> = new Map()
readonly refs: Map<string, IRef<unknown>> = new Map() readonly refs: Map<string, IRef<unknown>> = new Map()
sub(key: string) { sub(key: string) {
if (!this._subs[key]) { if (!this.subs[key]) {
this._subs[key] = new PrismScope() this.subs[key] = new PrismScope()
} }
return this._subs[key] return this.subs[key]
}
get subs() {
return this._subs
} }
cleanupEffects() { cleanupEffects() {