Когда дело доходит до кэширования, не существует простого решения. Вы можете кэшировать каждый вариант результата, и это нормально, если вы реализуете автоматическое истечение срока действия записей. Вы не можете просто использовать all_posts, потому что таким образом вам придется истечь десятки ключей, если посты будут изменены.
Каждый экземпляр модели AR имеет ключ .cache_key, основанный на методе updated_at, который является предпочтительным способом, поэтому используйте его вместо последней записи. Также не основывайте свой ключ на последней записи, потому что если какой-либо пост в середине будет удален, ваш ключ не изменится. Вместо этого вы можете использовать такую логику.
class ActiveRecord::Base
def self.newest
order("updated_at DESC").first
end
def self.cache_key
newest.nil? ? "0:0" : "#{newest.cache_key}:#{count}"
end
end
Теперь вы можете использовать Post.cache_key, который будет изменен, если какое-либо сообщение будет изменено / удалено или создано.
В общем, я бы просто кешировал Post.all и затем разбивал на страницы этот объект. Вам действительно нужно выполнить некоторое профилирование, чтобы найти узкие места в вашем приложении.
Кроме того, если вы хотите кэшировать каждый вариант, вместо этого используйте кэширование фрагмента / страницы.
Если решать, как и где кэшировать. Здесь нет одностороннего
Что касается второй части вопроса, у меня есть несколько подсказок, чтобы найти ответ. Проверьте, звонит ли браузер всем LiveHTTPHeaders, tcpdump и т. Д.