[buddypress-trac] [BuddyPress Trac] #5350: Caching for the activity component
buddypress-trac
noreply at wordpress.org
Tue Jan 21 22:07:04 UTC 2014
#5350: Caching for the activity component
--------------------------+----------------------------
Reporter: boonebgorges | Owner:
Type: task | Status: new
Priority: normal | Milestone: Future Release
Component: Activity | Version:
Severity: normal | Keywords:
--------------------------+----------------------------
We currently do (almost) no caching in the activity component. We should.
There are two kinds of entities that would benefit from caching throughout
bp-activity: *items* and *queries*.
Activity items will be fairly straightforward to cache. I suggest the
following lines of attack:
- In `BP_Activity_Activity::get()`, after we've pulled up data associated
with individual activity items matching the query, put it in item-specific
cache slots.
- Assuming we split our activity query as suggested in #5349, we can then
use the activity item cache when we fill in the missing data about each
activity item. See https://core.trac.wordpress.org/browser/tags/3.8/src
/wp-includes/query.php#L2927 for a similar tactic in `WP_Query`.
- Cache busting as appropriate.
*Query* caching will be a good deal more complex, and will probably be
best saved for after item caching is in place. The problem is
invalidation. A single activity item (say, "Boone posted an update in the
group Foo") is associated with multiple BP (Boone, Foo) and multiple
activity query types (sitewide stream, Boone's stream, Foo's stream, My
Groups for anyone who is a member of Foo, My Friends for any of Boone's
friends, etc). I've been working for a while on a more formal proposal for
working around this problem, but the short version is: we store (in cache)
an index of cache keys, where a given query cache key will be listed with
multiple associated items (eg, the cache key associated with the "Boone's
20 most recent My Groups activity" query will be indexed with Boone as
well as each of Boone's groups; then, when *any* of those items gets new
activity, all associated cache keys are flushed. I'll work on something a
little clearer than that, but consider this an initial idea-float.
--
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/5350>
BuddyPress Trac <http://buddypress.org/>
BuddyPress Trac
More information about the buddypress-trac
mailing list