Following up on the "performance issues" that I was reporting from before--the issue was that I was maxing out gun performance. I had done map().on() for ~50-60 objects and 3 - 4 additional on()s for each of those as well. gunjs seems to fire quite a lot for map().on() continually (honestly I haven't seen these calls end in my testing) so all of these on()s ended up clogging the system so that it would take 30 - 90 seconds to have a usable interface.
I refactored the whole system to only rely on the one map().on() for data and now things load an order of magnitude faster
// add listener to foo
gun.get('foo').on(callback, true)
// remove listener to foo
gun.get('foo').off()
const chain=gun.get('objkey') // please note each prop is reference to another object
const mapChain = chain.map().on(cb, false) // false to get initial and changes
// cb get called for initial values and changes in object
chain.off() // or mapChain.off()
// cb still gets called on changes