Как проверить кеширование в django?

17

Есть ли способ быть уверенным в том, что страница поступает из кэша на производственном сервере и на сервере разработки?

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

Проверка наличия устаревших данных - не очень безопасный метод тестирования IMO.

    
задан muhuk 07.12.2008 в 18:41
источник

4 ответа

20

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

<!-- component_name {{host}} {{timestamp}} -->

Имя_компонента просто упрощает просмотр и поиск этой строки.

Все наши представления, которые являются страницами сведений об объектах, определяют переменную контекста "page_object", и у нас это есть в верхней части основного шаблона шаблона base.html:

<!-- {{page_object.class_id}} @ {{timestamp}} -->

class_id () - это метод из суперкласса, используемый всеми нашими основными классами контента. Это просто:

def class_id(self):
    "%s.%s.%s" % (self.__class__._meta.app_label,
                    self.__class__.__name__, self.id)

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

    
ответ дан Peter Rowell 08.12.2008 в 03:33
  • Элегантное решение. Может быть также автоматизирован. Благодарю. –  muhuk 08.12.2008 в 08:11
  • Просто ради удобства у вас есть контекстные процессоры, которые вы упомянули где-то на djangosnippets.org или на другом сайте? –  Matthew 08.12.2008 в 18:22
  • Добавление обработчика контекста очень просто! 1. Создайте файл, например. my_context.py. 2. Создайте функцию, которая принимает объект запроса, например. my_context (запрос). 3. Верните подсказку забавных вещей, доступных всем шаблонам. 4. Добавьте «my_context.my_context» в TEMPLATE_CONTEXT_PROCESSORS в settings.py. 5. Прибыль! –  Peter Rowell 08.12.2008 в 21:13
16

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

 <!-- {% now "jS F Y H:i" %} --> 
    
ответ дан Johannes 06.04.2011 в 10:32
  • FWIW очень сильно нарушил стиль моего сайта в IE8, когда я добавил его в качестве первой строки моего шаблона. Кажется, все хорошо, когда оно находится внутри тегов html. И я поместил его в теги комментариев html. Долгое время выяснилось, что это послужило причиной моих проблем с CSS. –  j_syk 18.08.2011 в 01:48
  • Извините, что, боюсь, я забыл про теги комментариев. Поэтому я исправил запись в решении. –  Johannes 22.08.2011 в 13:26
  • он просто должен быть внутри объявления <html>. просто думал, что буду публиковать для будущих людей, читающих эту тему. но спасибо, это простое и эффективное решение –  j_syk 22.08.2011 в 15:09
  • Самое элегантное решение. +1 –  TomNysetvold 27.04.2012 в 03:29
7

Смоделируйте представление, перейдите на страницу и посмотрите, был ли вызван макет. если это не так, вместо этого использовался кеш.

    
ответ дан ironfroggy 07.12.2008 в 22:06
3

Причиной использования кешей является повышение производительности. Проверьте производительность, запустив нагрузочный тест на вашем сервере. Если производительность сервера соответствует вашим потребностям, то все готово!

    
ответ дан Ned Batchelder 07.12.2008 в 23:12