| > Dispatch is another big culprit. Could you clarify what you mean by that? Per both of your comments: generally speaking, your `mapState` functions _should_ run as quickly as possible. Ideally, a `mapState` function should just grab a couple values from the Redux state object and return those. If a component needs the store data to be transformed in some way, we recommend using memoized selector functions [0] to cut down on unnecessary work. So, in a well-written app, your `mapState` functions shouldn't be bottlenecks. As I said, if you've got some examples of specific perf issues, I'd be happy to offer advice. [0] https://blog.isquaredsoftware.com/2017/12/idiomatic-redux-us... |
A call to dispatch is significantly more expensive than the update of a JS object
> Ideally, a `mapState` function should just grab a couple values from the Redux state object and return those.
Ideally it should, but in practice it is really much more expensive than getting a value in a JS object
> If a component needs the store data to be transformed in some way, we recommend using memoized selector functions [0] to cut down on unnecessary work.
I used Reselect before removing Redux. Beyond the fact that it adds a lot of boilerplate it does not help if you do need a lot of data updates.
> So, in a well-written app, your `mapState` functions shouldn't be bottlenecks.
It shouldn't but a few dozen of updates per second through Redux on a mobile take a toll on its performance serious enough to not be able to keep 60fps in a WebGL context.
I decided to remove Redux after noticing the performance overhead per function call in the Chrome performance profiler, so I know that in practice "dispatch" and "mapState" are not comparable to just editing or grabbing "a couple values from the Redux state"
My ex-coworker had the same issues because he needed to display a lot of items handled collaboratively with smartphones. In both of our cases we have a high rate of data updates, even if we optimize like crazy we are never going to fall under 4-5 update/second per connected user.
So yeah Redux can run well for webapps with a slow/regular pace of update but for more performance sensitive apps you do pay a Redux performance tax.
Again I still use Redux on some projects and I like it but the limits are there. So now I don't hesitate to do without it first and to use it when I need its abstraction.