diff options
author | Evan Prodromou <evan@prodromou.name> | 2008-11-22 11:33:47 -0500 |
---|---|---|
committer | Evan Prodromou <evan@prodromou.name> | 2008-11-22 11:33:47 -0500 |
commit | 5632b2e6d5b54bcafc06b9979523ecc9b69ec1c4 (patch) | |
tree | 09781e1a6ef0854c39000c80bf4e50a4ba258627 | |
parent | 64101cc57935725d3d28186e5043e656ead93ec6 (diff) |
use cached fave stream to save DB hits for faves
darcs-hash:20081122163347-84dde-abb0dfc800f65f50951c5517af3bfda48013c6ed.gz
-rw-r--r-- | classes/User.php | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/classes/User.php b/classes/User.php index 38a56d1c8..12f174944 100644 --- a/classes/User.php +++ b/classes/User.php @@ -273,6 +273,28 @@ class User extends Memcached_DataObject } 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, 'notice_id' => $notice->id)); return ((is_null($fave)) ? false : true); |