Если вы возьмете cache_page
декоратор, он работает?
Декоратор cache_page
- это первый фрагмент кода, который фактически вызывается в вашей функции просмотра. Он проверяет временную метку и возвращает кэшированные данные, как и положено. Если срок действия кэша не истек, декоратор last_modified
не будет вызываться.
В любом случае, вы, возможно, захотите быть более внимательным к смешиванию обработки условных ответов и статического кэширования. Они выполняют похожие вещи, но используют совершенно разные механизмы.
cache_page
говорит django использовать представление только для отображения фактического ответа каждые n секунд. Если до этого поступит другой запрос, то же обработанное содержимое будет возвращено клиенту - независимо от того, является ли оно устаревшим или нет. Это снижает нагрузку на ваш сервер, но ничего не делает для уменьшения пропускной способности.
last_modified
обрабатывает случай, когда клиент говорит: «У меня есть версия этой страницы, которая такая старая; она все еще хороша?» В этом случае ваш сервер может проверить базу данных и выдать очень короткий ответ «Это все еще хорошо», если база данных не изменилась. Это значительно сокращает ваши потребности в пропускной способности для этих случаев, но вам все равно нужно обратиться к базе данных, чтобы определить, устарел ли кеш клиента или нет, поэтому нагрузка на ваш сервер может быть почти такой же.
Как я уже упоминал выше, вы не можете просто применить cache_page перед last_modfied - если база данных изменилась, cache_page не узнает об этом. Хуже того, если время ожидания кэша истекло , но база данных не изменилась, вы можете в конечном итоге кэшировать сообщение «304 Не изменено» и отправлять , что для всех последующих посетителей. в течение следующих пятнадцати минут.
Вы можете применять декораторы в другом порядке, но вы должны делать запрос из базы данных для каждого запроса, и вы все равно можете попасть в ситуацию, когда база данных изменилась, но кэш не истек - в этом случае клиент все еще может получать старую версию страницы, даже если сервер уже коснулся базы данных, чтобы определить, что она обновлена.