Как GAE обрабатывает кэширование?
Кажется, GAE устанавливает время истечения срока действия кэша в ближайшем будущем, но использует заголовок etag
.Это используется, чтобы браузеры могли спросить: «Изменился ли этот файл с тех пор, как у него было etag
из X68f0o
?» И услышать ответ «Нет» - 304 Not Modified
».
В отличие от дальнего- будущие даты истечения срока действия, у этого есть следующие компромиссы:
- Ваши конечные пользователи получат последние копии ваших ресурсов, даже если у них будет то же имя (в отличие от истечения срока давности).Это хорошо .
- Однако вашим конечным пользователям все равно придется сделать запрос, чтобы проверить состояние этого файла.Это замедляет работу вашего сайта и «накладные расходы», когда содержание не изменилось.Это не идеально.
Выбор срока действия кэша в далеком будущем вместо (просто) etag
Для использования дат срока действия в далеком будущем требуется двашаги и немного понимания.
Вы должны вручную обновить свое приложение, чтобы запрашивать новые версии ресурсов, например, называя файлы, такие как mysitesstyles.2011-02-11T0411.css
вместо mysitestyles.css
.Существуют инструменты, помогающие автоматизировать это, но я не знаю ни одного, который бы имел прямое отношение к GAE.
Сконфигурируйте GAE, чтобы установить желаемое время истечения с помощью default_expiration
и /или expiration
в app.yaml
. Документы GAE для статических файлов
Третий вариант: манифесты приложения
Манифесты кэша - это функция HTML5, которая переопределяет заголовки кэша. MDN артикул , DiveIntoHTML5 , W3C .Однако это влияет не только на кэширование ваших скриптов и файлов стилей.Используйте с осторожностью!
Когда GAE gzip
?
В соответствии с Часто задаваемыми вопросами Google ,
Google App Engine делает все возможное, чтобыобслуживать сжатый контент браузерам, которые его поддерживают.Использование этой схемы происходит автоматически и не требует изменений в приложениях.
Мы используем комбинацию заголовков запроса (Accept-Encoding, User-Agent) и заголовка ответа (Content-Type), чтобы определить, действительно ликонечный пользователь может использовать сжатый контент.Этот подход позволяет избежать некоторых известных ошибок с gzipped-контентом в популярных браузерах.Чтобы заставить gzip-контент обслуживаться, клиенты могут предоставить gzip в качестве значения как заголовков запроса Accept-Encoding, так и User-Agent.Контент никогда не будет заархивирован, если отсутствует заголовок Accept-Encoding.
Это подробно описано в документации среды выполнения ( Java | Python ).
Некоторые наблюдения в реальном мире показывают, что в целом это правда.Предполагая, что браузер поддерживает gzip:
- GAE gzips настоящие страницы (если они имеют правильные
content-type
заголовки, такие как text/html; charset=utf-8
) - GAE gzips скрипты и стили в
static_dir
s(определено в app.yaml
). - Обратите внимание, что вы не должны ожидать, что GAE будет сжимать изображения, такие как GIF или JPEG, поскольку они уже сжаты.