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