Правильная стратегия кеширования для динамического действия - PullRequest
2 голосов
/ 07 марта 2011

Вероятно, очевидный вопрос для тех из вас, кто что-то масштабировал / кэшировал раньше.У меня нет, и я заблудился в учебных пособиях и фрагментах кода по всему Интернету (http://guides.rubyonrails.org/caching_with_rails.html).

Я развертываю в Heroku с установленным Memcached и выясняю, как оптимизировать этот способ.следующее:

  1. Запросить базу данных, чтобы найти сообщение и посмотреть, был ли он помечен
  2. Запросить белый список, чтобы узнать, была ли помечена другая часть сообщения.'
  3. Запросите API, чтобы узнать, нашел ли он этого пользователя в своей системе.
  4. Визуализация страницы с множеством повторных вызовов к удаленным системам для CSS / JS / и т. Д.

Я предполагаю, что # 1 происходит часто и часто меняется. # 2 реже. # 3 меняется нечасто (месяцы), и # 4 должен изменяться только, если # 3 меняется.

Я хочу иметь возможностьувеличивайте flag_count и view_count регулярно, не обращаясь к кешированной версии. Какое сочетание кеширования страниц, действий и фрагментов мне следует делать? Прямо сейчас, я вообще не кеширую это действие ...

Мой [упрощенный]код контроллера:

def show
  expires_in 12.hours, :public => true

  @post = Post.find(params[:id])

  #CHECK FLAG STATUS
  redirect_to root_path and return if @post.flag?

  #CHECK WHITELIST STATUS
  redirect_to root_path and return if Whitelist.includes?(@post.screen_name)

  #Ping API again on the off chance user deleted/changed account
  if @post && @post.user = get_user_from_api( @post.screen_name )
    @post.increment_views!
    render :layout => false
  else
    redirect_to root_path
  end    
end

1 Ответ

2 голосов
/ 05 мая 2011

Есть несколько небольших вещей, которые могут с этим работать.Хитрость, учитывая, что нет способа избежать попадания в стек приложения каждый запрос.

Кэширование фрагментов

Использование кэширования фрагментов с memcache, чтобы избежать регенерации содержимого записей / комментариев.Здесь могут быть некоторые выгоды, если ваши взгляды тяжелы.Срок действия объектов Memcache истекает, и их можно привязать к самой последней версии сообщения, например:

<% cache @post.cache_key do %>
  <%= @post.formatted_content %>
  ...
<% end %>

Другие факторы, которые следует учитывать

  • Настройка сервера для отправки заголовков кэша сизображения, JS & CSS
  • Проверьте бариста , чтобы сократить запросы и объединить активы
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...