Rails Caching (контент против страницы / действия / и т. Д.) - PullRequest
3 голосов
/ 11 июля 2010

Что такое кэширование контента (как этот плагин здесь: http://blog.codahale.com/2006/04/10/content-only-caching-for-rails/) против кэширования страницы / действия / фрагмента, встроенного в Rails?

Я хотел бы заняться кэшированием в своем приложении на Rails, но я не совсем знаю, какой тип использовать. Мое приложение имеет в основном динамические, специфичные для пользователя данные на каждой странице. Возможно ли кеширование даже с этим?

1 Ответ

6 голосов
/ 11 июля 2010

В этом руководстве представлен большой обзор встроенных альтернатив Rails для кэширования.Но в итоге:


Кэширование страницы: при первом запросе действия контроллера копия всей сгенерированной страницы записывается в статический файл .html, чтобы в следующий раз кто-нибудьзапрашивает то же действие, которое может быть выполнено веб-сервером, не затрагивая ваше приложение Rails вообще.Это очень быстро, но имеет ограничения, например, запрос на кэшированную страницу не проходит через ваше приложение, поэтому вы не можете использовать фильтры для аутентификации и ограничения доступа к странице.

Кэширование действий: запрос всегда отправляется с веб-сервера в приложение Rails, так что ваши фильтры запускаются, но если запрос проходит фильтры и действие кэшируется, то кэшированная копия подается вместо фактического выполнения кода в действии вашего контроллера.Ограничение: один и тот же кэшированный контент предоставляется всем пользователям, поэтому на странице не должно быть никаких персонализированных данных (например, отображение имени пользователя, вошедшего в систему в заголовке)

Кэширование фрагмента: контроллеркод действия выполняется, но в представлении можно кэшировать отдельные блоки страницы.например, если у нас есть что-то в боковой панели, которое требует больших вычислительных ресурсов.


Плагин, с которым вы связались, добавляет дополнительный уровень гранулярности.Содержимое действия кэшируется, но не содержимое макета, поэтому, если макет содержит, например, <%= curent_user.full_name %>, он будет персонализирован для каждого пользователя.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...