New module: Authenticated User Page Caching (Authcache)

Events happening in the community are now at Drupal community events on www.drupal.org.
Jonah Ellison's picture

Authcache offers page caching for logged-in authenticated users. This allows Drupal to load pages in 1-2 milliseconds and take the load off the the database & processor. Please help test this module (the site I was creating this for got axed, but I continued development on this module). Feedback & patches are welcome. This module can be used for anonymous users (it's faster than Drupal core since the database won't be hit), supports the statistics module, and can cache blocks of user-customized content.

Many thanks to Steve Rude for his work on the Cache Router module, which Authcache uses as its caching system.

This is how it works:

Only local images are allowed.

This technique has been around a while, so I take no credit in the idea, only the implementation. ;) I'm somewhat obsessed with optimization & page load times, which is why I developed this module. There's just something awesome about a fast, responsive website.

Demo site:
http://authcache.httpremix.com

Comments

Very Interesting

joshk's picture

This looks very interesting. I'm wondering what if any thoughts you might have around what should/could happen if the JSON pingback doesn't happen very fast (e.g. db is non-responsive for some reason) and form tokens aren't updated. It's probably outside the scope of just this module, but maybe automated JS to disable forms until they can be enlivened with working data?

http://www.chapterthree.com | http://www.outlandishjosh.com

Form Tokens

Jonah Ellison's picture

Yes, I've taken this into account. If the form submits and the token isn't set, another Ajax request is sent and will automatically submit the form once it receives the token.

Sweet dude!

joshk's picture

Hot.

I'm actually going on vacation for two weeks, but will pick up this thread when I get back. Congratz on this and thanks for releasing it to the community!

http://www.chapterthree.com | http://www.outlandishjosh.com

Interesting approach - the

FiReaNGeL's picture

Interesting approach - the ideal solution would be to somehow allow Drupal to identify dynamic content, render and cache all the non-dynamic bits, calculate the dynamic ones at load, merge everything together and output to browser. Some pages have literally one string of dynamic content, and as of now we still recalculate everything for logged in users.

Good step forward! But Ajax has as you noted, many pitfalls and may not be reliable enough in this specific context for production sites.

very interesting! super

slantview's picture

very interesting! super bummed that you had to fork cache router as there are going to be some major developments in that module, not to mention i am rewriting the caching system for D7 (cross your fingers that this will get in).

is there any way to integrate with cache router without forking? anything i can help with?

i want to spend a bit more time checking this out before i really can give a review / feedback.

Hmm, the major change is the

Jonah Ellison's picture

Hmm, the major change is the page_cache_fastpath() function... so a fork could probably be avoided if that code is integrated into Cache Router. I also changed the db engine to allow fast caching. There's also a slight change in cache_clear_all() to avoid clearing all pages on cronjobs (not sure if this is too aggressive, though). Otherwise I think everything else is mostly same. It would be nice to integrate somehow, then I wouldn't have to keep track of updating the fork files. =)

Quick question...

Swampcritter's picture

Will it be possible to run both the Authcache and Cache Router modules at the same time?

-- Michael

You can have both modules

Jonah Ellison's picture

You can have both modules enabled at the same time, but the "cache_inc" key in settings.php should be set to the authcache.inc path. Authcache uses the same code as Cache Router, so when Authcache is enabled, you have the same functionality as Cache Router.

Well after multiple tests

Swampcritter's picture

Well after multiple tests and discovery, you cannot run both CacheRouter and AuthCache modules at the same time for memcache clustering. In fact, CacheRouter will take presidence over the AuthCache in the settings.php file.

Since memcached doesn't have a way for 'verbose logging', I ran an instance of alternative-memcached 'Tugela Cache' (http://meta.wikimedia.org/wiki/Tugela_Cache) in very verbose mode and was able to capture in real-time how all set and deletion of keys was going through the CacheRouter and totally bypassing AuthCache.

-- M

let's figure out a way to

slantview's picture

let's figure out a way to pull cache router out of this module, i really like the idea, but i really don't support the idea of forking it. i've had a hard time keeping up with the changes in the memcache module and implementing them. for example i still don't support cache stampede protection that memcache has. not to mention the huge duplication of code.

you can't run both modules at the same time actually, cause the cache router module itself does very little. all the logic is in cacherouter.inc.

High performance

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week