Regardless of cache granularity, we will need to validate and reset the cache somehow. I see two basic methods: 1. An event triggers the cache to reset. Currently cache_clear_all() accomplishes this when we publish nodes, comments, and do certain other things. If we decide to cache page elements, perhaps we could use event hooks that module authors can use to trigger cache resets. The challenge is to identify every possible event and consider the ramifications of each event for each user, but at least the cache is validated only when needed. 2. Page elements poll the cache for every page request. When a page is loaded, the page element computes a cache key and checks for cached results. For example, in nodelist.module I used an md5-checksum of the sql query as a cache key. If the sql query changes, the cache misses. In this case, the challenge is to efficiently compute accurate cache keys and handle stale results, but at least we don't have to worry about every event in the system. If we used a functional style of programming, Drupal could intercept the arguments to certain module functions and check for cached results. But we interact with global dynamic variables (including the database), so this is probably not a possibility. I don't see a way for Drupal to automatically handle caching per page element without cooperation from module authors. So the question is, 1. Do we rely on module authors to hook into every relevant system event, or 2. Do we rely on module authors to manage their own cache keys on every page load? Nic On Jun 1, 2005, at 3:04 AM, Dries Buytaert wrote:
Conclusion ----------
1. Loose caching has NO effect on drupal.org's page cache. 2. Loose caching has NO well-defined effect on drupal.org's flush ratio.
Possible solutions ------------------
Unless we can serve 2000+ pages/flush (random estimate), the cache will never be efficient.
1. Rework loose caching to flush less frequently. 2. Flush partially. 3. Maybe there is a bug? 4. Remove 'loose caching'?
-- Dries Buytaert :: http://www.buytaert.net/