I was hoping that the Rails' QueryCache might cache the ActiveRecord
objects it creates and not just the SQL result set, but some
experimentation shows that this is not the case. For example:
ActiveRecord::Base.cache do
?> u = User.find(:first)
u.name="z"
u = User.find(:first)
end
returns a clean copy of the object.
My question is, is there a way to cache the ActiveRecord objects as
well? I have read that their construction is time consuming. I found
the plugin ActiveRecordContext (dcadenas (Daniel Cadenas) · GitHub
active_record_context) but it was last updated *way* back in 2007, so
I wasn't sure it is the best thing to use (or if it even works with
the current Rails).
Thanks,
--Paul
My question is, is there a way to cache the ActiveRecord objects as
well? I have read that their construction is time consuming.
I think that used to be the case, but I don’t think it is any more (which may be why the Query cache doesn’t cache them). Also, how many objects are you constructing? It should really only be a page worth, otherwise I’d use aggregate functions (if you’re just iterating anyway).
Cheers,
Andy
Thanks for the reply. I'm not sure about how many objects, but for
page (on which we are showing way, way too much information) we do
about 5000 SQL queries, a few of which might pull back 100 records or
so. I think a lot of those calls could be collapsed with eager
loading. But, lets say there are 6000 objects. On my system, I
calculated the object construction time (not including SQL time) as
being .000031s, which for 6000 objects adds up to 0.186s-- which is
not insignificant, though probably not our biggest performance issue.
I took a look at aggregate functions, and I don't think they would be
of much use in this case, but thanks for mentioning them because I
wasn't aware you could do that.
--Paul
Wow!!! 5000 SQL queries!
I don’t know what you’re doing, but I hope you’re not allowing lots of people to view that page at the same time, MySQL meltdown 
Cheers,
Andy