nuclear-js icon indicating copy to clipboard operation
nuclear-js copied to clipboard

Refactor getter caching based on keypath state

Open jordangarcia opened this issue 9 years ago • 1 comments

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

jordangarcia avatar Sep 27 '16 21:09 jordangarcia

Just curious if this is going to be merged any time soon?

alex-kovoy avatar Aug 29 '17 02:08 alex-kovoy