Ошибка кэширования на уровне анонимного URL - PullRequest
0 голосов
/ 30 ноября 2011

Я хочу включить кэширование на уровне просмотра для просмотров страниц анонимных посетителей. Я включил соответствующее Middleware (я так думаю, по крайней мере).

MIDDLEWARE_CLASSES = [
'django.middleware.cache.UpdateCacheMiddleware',  # This needs to be first https://docs.djangoproject.com/en/dev/topics/cache/#order-of-middleware-classes
'django.middleware.gzip.GZipMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'pagination.middleware.PaginationMiddleware',
'django.middleware.transaction.TransactionMiddleware',
'waffle.middleware.WaffleMiddleware',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',

]

Это должно автоматически установить соответствующие заголовки HTTP, верно? Ну, похоже, что это так.

Cache-Control   max-age=600
Content-Encoding    gzip
Content-Type    text/html; charset=utf-8
Date    Wed, 30 Nov 2011 18:46:05 GMT
Expires Wed, 30 Nov 2011 18:56:05 GMT
Last-Modified   Wed, 30 Nov 2011 18:46:05 GMT
Vary:Cookie, Accept-Encoding

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

В firebug есть вкладка консоли под названием «Кэш», которая показывает следующее:

 Last Modified  Wed Nov 30 2011 13:46:05 GMT-0500 (EST)
 Last Fetched   Wed Nov 30 2011 13:46:05 GMT-0500 (EST)
 Expires    Wed Nov 30 2011 13:56:03 GMT-0500 (EST)
 Data Size  11547
 Fetch Count    17
 Device disk

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

Спасибо за любые предложения.

Ответы [ 3 ]

0 голосов
/ 27 января 2012

На моем локальном dev-сервере, где я использую localhost, кажется, что браузер устанавливает max-age = 0, поэтому кэширование страниц не происходит.

0 голосов
/ 12 июля 2012

Вы используете Google Analytics на странице? Он добавляет два файла cookie, которые варьируются в каждом запросе, и, поскольку вы включили сеансы, которые добавляют файл cookie, который означает, что каждая запрошенная страница рассматривается как уникальная в структуре кэширования.

Обходной путь заключается в удалении файлов cookie Google Analytics. Я нашел код на django-snippets, который делает это.

# Middleware to strip out Google Analytics cookies that mess up caching
import re
class StripCookieMiddleware(object):
    strip_re = re.compile(r'(__utm.=.+?(?:; |$))')
    def process_request(self, request):
        try:
            cookie = self.strip_re.sub('', request.META['HTTP_COOKIE'])
            request.META['HTTP_COOKIE'] = cookie
        except:
            pass

Добавьте это первым в списке промежуточного программного обеспечения.

Подробнее о кешировании Django и его проблемах здесь: https://groups.google.com/d/msg/django-developers/EojHkVKxVWc/G7iNJsARF4IJ

0 голосов
/ 30 ноября 2011

Украсили ли вы особые виды, которые вы хотите кэшировать?

https://docs.djangoproject.com/en/dev/topics/cache/#the-per-view-cache

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...