Only load what’s necessary to draw the initial screens then fill in the rest later.
Part of my strategy was to simply remove the amount of information served. That’s easier said than done. Having lots of data in the browser makes is really easy to do some pretty powerful things, like complex filtering of items based on a really large subset of data. In my case I could filter any WordPress site based on any plugin on any version or any status. That works out well for a few hundred sites with maybe 25 different themes and plugins each. However with over 1000 sites the amount of data needed starts to be a bit much and would be better offloaded to the server side.
/captaincore/v1/filters/<filters>/sites/versions=<versions>/statuses=<statuses> – Returns list of sites included in filters.