Ruby Forum Ruby on Rails > Ajax Request Caching by Timestamp?

Posted by Kevin Alford (zeroeth)
on 10.04.2008 03:03
Hi everyone, first post here in the forum. I'm usually in #rubyonrails
on freenode.

I've been thinking about the various types of caching, and I was
wondering if its possible to have the server selectively send back data,
instead sending nothing '0' if user has the newest data.

My example is a presence monitor, and it seems like the logic is:

- Rails caches the 'current user' list fragment with a timestamp.
- User requests a view that contains a periodic_updater to the current
user list (and the updater passes the timestamp in its requests back to
server)
- the server compares it to the current timestamp on that fragment. if
its identical. send back a 0/nochange notice. otherwise send back the
newer data with its timestamp.
- now further xhr requests from client contain the updated timestamp.

I'd like to know if anyones already attempted or thought of this before.

Thanks!
-zer0
Posted by Julian Leviston (Guest)
on 10.04.2008 04:26
(Received via mailing list)
Yes, or id.

Learn Ruby on Rails! Check out the FREE VIDS (for a limited time)
VIDEO #3 out NOW!
http://sensei.zenunit.com/
Posted by Kevin Alford (zeroeth)
on 10.04.2008 15:26
Julian Leviston wrote:
> Yes, or id.
> 

Not quite sure I understand your response.

After I posted I took a look over the cache api again. And one can use 
regex to delete multiple fragments.

So for what I'm trying todo, it would be something like:

- user requests index that has current_users partial, do a regex find 
for "current_users.*" (there should be only one)
- the time stamp of that fragment is added to the params of a periodic 
updater.
- each time the ajax request comes in, just do a straight find by name 
on the fragment. (ie current_users200804100923)
- the fragment is found, send back nothing/0/nochange, (unless its been 
expired by someone logging in or logging out), in which case a new one 
is made, and time stamped.
- rinse, repeat as needed =)

I'm really just thinking out loud and curious if anyone has tried 
anything like this. I welcome your input.