Есть ли причина не использовать USE_ETAGS с CommonMiddleware в Django?

Единственная причина, по которой я могу думать, заключается в том, что расчет ETagЭто может быть дорого. Если страницы меняются очень быстро, кеш браузера, вероятно, будет аннулирован ETag, В этом случае вычисление ETag было бы пустой тратой времени. С другой стороны, давая 304 Ответ, когда это возможно, минимизирует количество времени, затрачиваемого на передачу. Каковы хорошие рекомендации, когда ETagвероятно, будет чистым победителем при реализации с Django CommonMiddleware?

3 ответа

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

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

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

Опять же, будет полезно попробовать профилировать это с вашими реальными данными, а не обобщать, чтобы "делать или не использовать".

Существует много способов обработки кэширования, и часто это зависит от приложения. В первых сценариях я предлагаю, как вы можете рассмотреть возможность использования USE_ETAGS от django.middleware.common.CommonMiddleware:

  1. Разделите ваше приложение между кэшируемыми и не кэшируемыми экземплярами gunicorn. Соедините сайт с обратным прокси. Затем продолжайте,

  2. Написание кода, который делает недействительным кеш на модели, сохраняет. В качестве следующего шага

  3. Написать собственное пользовательское промежуточное программное обеспечение

Я не понимаю, почему вы ищете причину не делать что-то. Однако ваш анализ далек от завершения: условные запросы / 304 ответа могут на самом деле заставить ваше приложение работать значительно медленнее, чем если бы вы удалили if-Modified-Since / If-none-Match, однако они действительно удовлетворяют поисковые системы и имеют преимущество репликация сервер-сервер (например, на CDN)

C.

Другие вопросы по тегам