2015-10-23 2 views
3

Мне нужно реализовать кеширование на моем сайте Django 1.8 (для ускорения рендеринга, очевидно). План заключается в использовании Memcache, хотя этот вопрос напрямую не связан с ним.Использование кеша Django в том и только в том случае, если пользователь вышел из системы?

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

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

Возможно, мне придется написать свою собственную функцию кеш-декодера/кеша, используя API-интерфейс кэша нижнего уровня и прикрепить его ко всем доступным URL-адресам/представлениям на сайте. Хотя это не кажется сложным, это кажется невероятно распространенной особенностью. Неужели в Django действительно ничего не сделано? Я волнуюсь, что, возможно, что-то пропустил, и переоцениваю колесо.

Спасибо!

ответ

1

Прежде всего, кеширование шаблонов превышено. Сначала используйте панель инструментов отладки django, чтобы определить, действительно ли рендеринг шаблонов очень медленный в вашей установке django. Я держу пари, что это не узкое место. Если вы обнаружите, что это медленно. Можно кэшировать на каждого пользователя следующим образом:

{% cache 300 FULL_PAGE request.build_absolute_uri request.user %} 

Первый параметр к cache template tag является тайм-аут, а второй это имя другим уникальным образом идентифицировать фрагмент.

+0

Спасибо за этот ответ - я вижу, как это можно использовать для каждого пользователя. Отказ шаблона в этом случае не является узким местом. Что является узким местом, так это тот факт, что шаблон заполняется несколькими вызовами базы данных (поскольку фактический контент хранится в elephantblog/feincms). Следовательно, мне нужно кэшировать на уровне URL/контроллер, прежде чем он даже сделает эти вызовы. – mallyvai

+0

это также может использоваться для пользователей без авторизации, потому что тогда пользователь будет анонимным для всех из них. Да, кеширование всех или части запросов в memcache может дать вам гораздо лучшее улучшение скорости – e4c5

Смежные вопросы