Есть ли причина не использовать USE_ETAGS с CommonMiddleware в Django?
Единственная причина, по которой я могу думать, заключается в том, что расчет ETag
Это может быть дорого. Если страницы меняются очень быстро, кеш браузера, вероятно, будет аннулирован ETag
, В этом случае вычисление ETag
было бы пустой тратой времени. С другой стороны, давая 304
Ответ, когда это возможно, минимизирует количество времени, затрачиваемого на передачу. Каковы хорошие рекомендации, когда ETag
вероятно, будет чистым победителем при реализации с Django CommonMiddleware
?
3 ответа
Как и в случае с любым механизмом кэширования, вам необходимо оценить компромисс между временем, затрачиваемым на манипулирование кешем, и сэкономленной из-за него пропускной способностью.
Как вы говорите, если ответ часто меняется, ETag могут быть не очень полезны. ETag - это метод для кэширования полных ответов, поэтому, если ответ часто меняется, на самом деле кешируется не так много. Тем не менее, я бы предположил, что, поскольку ETag широко используются, реализации браузеров достаточно быстры, и Django, вероятно, тоже достаточно быстр.
Возможно, есть другие области до ответа, которые могли бы выиграть от кэширования, например, memcached.
Опять же, будет полезно попробовать профилировать это с вашими реальными данными, а не обобщать, чтобы "делать или не использовать".
Существует много способов обработки кэширования, и часто это зависит от приложения. В первых сценариях я предлагаю, как вы можете рассмотреть возможность использования USE_ETAGS
от django.middleware.common.CommonMiddleware
:
Разделите ваше приложение между кэшируемыми и не кэшируемыми экземплярами gunicorn. Соедините сайт с обратным прокси. Затем продолжайте,
Написание кода, который делает недействительным кеш на модели, сохраняет. В качестве следующего шага
Написать собственное пользовательское промежуточное программное обеспечение
Я не понимаю, почему вы ищете причину не делать что-то. Однако ваш анализ далек от завершения: условные запросы / 304 ответа могут на самом деле заставить ваше приложение работать значительно медленнее, чем если бы вы удалили if-Modified-Since / If-none-Match, однако они действительно удовлетворяют поисковые системы и имеют преимущество репликация сервер-сервер (например, на CDN)
C.