Кэширование фрагментов Rails с персонализацией
У моего сайта есть верхняя строка меню навигации, которая редко меняла содержимое, и поэтому является хорошим кандидатом для кэширования фрагментов. Но если пользователь вошел в систему, часть строки меню будет содержать имя пользователя, поэтому оно персонализировано и не может быть кэшировано.
Я могу либо:
Фрагмент кэширует статическую часть и обслуживает персонализированную часть отдельно. Это кажется довольно простым.
Кэшируйте партию, возможно, в memcached или CloudFront, сохраняйте имя пользователя в сеансе и используйте JavaScript для извлечения имени пользователя из сеанса и персонализации страницы на стороне клиента.
Каков наилучший вариант? Желательно исходя из личного опыта подобных ситуаций.
1 ответ
Попробуй это:
##in user.rb to cache user
after_save :invalidate_cache
def self.serialize_from_session(key, salt)
single_key = key.is_a?(Array) ? key.first : key
Rails.cache.fetch("user:#{single_key}") do
User.where(:id => single_key).entries.first
end
end
def invalidate_cache
Rails.cache.delete("user:#{id}")
end
Кредит: Rails Devise: Как я (mem) кеширую запросы базы данных устройства для объекта пользователя?