use cached fave stream to save DB hits for faves

darcs-hash:20081122163347-84dde-abb0dfc800f65f50951c5517af3bfda48013c6ed.gz
This commit is contained in:
Evan Prodromou 2008-11-22 11:33:47 -05:00
parent 64101cc579
commit 5632b2e6d5

View File

@ -273,6 +273,28 @@ class User extends Memcached_DataObject
} }
function hasFave($notice) { function hasFave($notice) {
$cache = common_memcache();
# XXX: Kind of a hack.
if ($cache) {
# This is the stream of favorite notices, in rev chron
# order. This forces it into cache.
$faves = $this->favoriteNotices(0, NOTICE_CACHE_WINDOW);
while ($faves->fetch()) {
if ($faves->id > $notice->id) {
# If we passed it, it's not a fave
return false;
} else if ($faves->id == $notice->id) {
# If it matches a cached notice, then it's a fave
return true;
}
}
# If it's past the end of the cache window,
# fall through to the default
}
$fave = Fave::pkeyGet(array('user_id' => $this->id, $fave = Fave::pkeyGet(array('user_id' => $this->id,
'notice_id' => $notice->id)); 'notice_id' => $notice->id));
return ((is_null($fave)) ? false : true); return ((is_null($fave)) ? false : true);