nuclear-js
nuclear-js copied to clipboard
Refactor getter caching based on keypath state
The current version of NuclearJS uses a cache key consisting of store states (monotomically incresing ID per store). This has the disadvantage of allowing only a single level of depth when figuring out if a cache entry is stale. This leads to poor performance when the shape of a Reactor's state is more deep than wide, ie a store having multiple responsibilities for state tracking.
The implementation is as follows:
- Consumer can set the maxCacheDepth when instantiating a reactor
- Getters are broken down into the canonical set of keypaths based on the maxCacheDepth
- Add a keypath tracker abstraction to maintain the state value of all tracked keypaths
- After any state change (
Reactor.__notify) dirty keypaths are resolved and then based on which keypaths have changed any dependent observers are called
@loganlinn
Just curious if this is going to be merged any time soon?