[development] Caching, caching, caching...
Gordon Heydon
gordon at heydon.com.au
Sun Jul 23 09:48:37 UTC 2006
Hi,
Remember also modules like organic groups which has no relation to roles.
Maybe a caching flag on theme('page'), so the modules can determine tell
the system to cache this page for this user, or groups of users.
I know that we just return something, so we would need to make the
return method to allow the returning of an array which is past to
theme('page');
Gordon.
John Handelaar wrote:
> Dries Buytaert wrote:
>>
>> Cache by role doesn't work because there are many per-user settings
>> (eg. language preference, the username in the navigation-block, etc).
>
>
> To be fair, I did *explicitly* mention that would be some
> elements which could not be cached by role.
>
> There are, however, a whole bunch which can - I'm confident
> in my original assertion of 'vast majority', in fact.
>
> That there are some places it can't work doesn't sound like
> a good reason to not consider the places where it can -
> unless we're going to keep thinking of caches as a full-page-
> only thing.
>
> i18n/l10n, as you say, would probably have to be another "vary"
> switch. This implies that we should maybe be thinking about
> a new core hook, which modules can use to introduce/manage switching
> cases.
>
> How about stepping back and thinking about what variables can
> affect caching on any given theme() function, and in which order
> they do so?
>
> eg
>
> 1. (core) Role, and if not role then
> 2. (core) User, and if not user then
> 3. (i18n module) $some_i18n_variable, else
> 4. ...what else?
>
>
> Actually, that list might be upside down in practice, but
> hopefully I've managed to get my point across.
>
>
> Cached values would be returned for any function which
> returns theme output... like...
>
> [pseudo-code]
>
> function node_page_default() {
> global $user;
> if (node_page_default_cache($user->uid)) {
> return node_page_default_cache($user-uid);
> }
> else {
>
> // original function here
>
> }
> }
>
> ...where node_page_default_cache() would be an implementation
> of hook_cache(), which in turn contains that order-of-preference
> logic mentioned above. $user->uid gives us the ability to
> check roles, uids, and anything else we might need.
>
> This would involve changing *lots* of functions, I realise,
> but consider how many DB queries we'd be culling.
>
> On the other hand, a well-written hook allows modules to
> start using it incrementally - modules which haven't implemented
> it yet don't fail.
>
>
>
>
>
>
More information about the development
mailing list