Skip to content

Memberside Optimizer

The member directory is the screen most likely to slow down as a community grows. Optimizer is the fix for that specific problem.

Membership plugins store profile fields as user meta. A directory that filters and sorts across several of those fields becomes a query with a join per field, and that query gets slower with every member you add.

At a few hundred members nobody notices. At tens of thousands, the directory is the slowest screen in the app, and it is usually one of the first screens a member opens.

Optimizer maintains a wide lookup table: one row per member, one column per searchable field. The directory reads from that table instead of assembling the same answer from user meta on every request.

Switch on Keep the table in sync and Optimizer watches for changes as they happen — a profile saved, a member approved, a photo uploaded, an account deleted — and refreshes just the affected row shortly afterwards. You do not have to rebuild to see an edit.

Leave it off and the table is a snapshot: accurate as of the last rebuild, and out of date from the next profile save until the next one.

Sync is deliberately a switch rather than always-on, because it adds a small amount of work to every profile change. On a site that rebuilds nightly and whose directory does not need to be up to the minute, the snapshot is fine.

The Services screen shows how far behind the table is — how many members are waiting to be refreshed, and how long the oldest has been waiting. On a healthy site that number sits at zero most of the time and spikes briefly after a bulk edit or an import.

Four screens, each switched on separately under Memberside → Services, and each safe to leave off:

ScreenWhat was slow
Your Ultimate Member directoryA join against user meta per searchable field
Your BuddyPress members directorySorting by “recently active” scans the whole activity stream; “alphabetical” sorts a text column that cannot be indexed
The app’s member directoryThe same per-field joins, on the screen members scroll most
The members mapEvery pan compares coordinates stored as text, which no index can help, twice

They are separate switches because they are separate translations. Evidence that one is correct on your site says nothing about the others, so each has its own Shadow mode: both engines run, your members still see the original result, and the panel reports whether the two agreed.

BuddyBoss Platform works the same way — it is the same community software under a different name — though it has had less testing than BuddyPress.

Look at Site Health, specifically the endpoint breakdown.

Optimizer is the answer when the Directory group is slow and the others are not.

Optimizer is not the answer when everything is slow — that is the site or the host, and speeding up one query will not be felt.

Optimizer is part of the Memberside plugin on your own site rather than a service your app connects to. Configure it under Memberside → Services.

The first build of the lookup table runs in the background over your existing members and takes a while on a large site. The directory keeps working from user meta while it runs, so there is no downtime — it gets faster when the table is ready rather than switching over abruptly.

Optimizer also mirrors local WordPress avatars to a CDN, leaving Gravatar alone for the reason given under Media CDN: a Gravatar URL is already served from a CDN.

SymptomCauseFix
The directory is no fasterThe lookup table is still buildingGive it time on a large site
Everything is still slowThe bottleneck is the site, not the directory queryLook at hosting and heavy plugins
A member’s profile change is not reflectedSync is switched off, so the table is a snapshotSwitch on Keep the table in sync, or rebuild
Members are queued and the number never fallsNothing is draining the queue — the site has no background task runnerInstall a scheduler, or drain by hand from Memberside → Services
A few members are marked as failingTheir data cannot be read into a columnLook at the reason shown beside the count; retry once the field is fixed
A field cannot be filtered onIt is not in the lookup tableCheck the field is configured under Memberside → Services
A screen is switched on but no fasterIts requests are falling backShadow mode lists why. Random ordering, and searches across every profile field, always fall back
Everything switched itself off after a changeYour fields or your plugins changed, so the table no longer matchesRebuild