Каковы жесткие и быстрые правила для управления кэшем?

15

Признание : у сайтов, которые я поддерживаю, есть разные правила для управления кэшем, в основном основанные на конфигурации сервера по умолчанию, а затем рекомендации от плагинов Page Speed & Y-Slow Firefox и представление «Сетевые ресурсы» в Google Speed ​​Tracer . Cache-Control имеет значение private / public в зависимости от того, что они говорят делать, заголовки ETag / Last-Modified используются только в том случае, если Y-Slow предполагает, что что-то не так, и Vary-Accept-Encoding кажется необходимым при ручном gziping файлах для Amazon CloudFront.

При чтении материала о различных опциях и их действиях появляется противоречивая информация, правила для сломанных прокси и конфигурации культа груза . Любая официальная информация, предоставленная инструментами анализа, упомянутыми выше, является довольно недоступной, поскольку она касается каждой темы в отдельности, а не в качестве единой стратегии (поэтому нет перекрестных ссылок на методы).

Например, кажется, не имеет смысла, что инструменты анализа скорости оценивают сайт с ETag так же, как сайт без них, если они предназначены для помощи в кэшировании.

Каковы жесткие и быстрые правила для стратегии Cache Control, независимой от платформы?

РЕДАКТИРОВАТЬ:

Ссылка через статью Джеффа Этвуд объясняет Кэширование в превосходной глубине.

Для записи вот жесткие и быстрые правила:

Если файл сжимается с использованием GZIP и т. Д. - используйте «cache-control: private», поскольку прокси-сервер может вернуть сжатую версию клиенту, который ее не поддерживает (однако в кеше браузера будут храниться файлы, помеченные таким образом). Также не забудьте включить «Vary: Accept-Encoding», чтобы сказать, что это сжимаемо.

Используйте Last-Modified в сочетании с ETag - использование пояса и фигурных скобок обеспечивает оба валидатора, в то время как ETag основан на содержимом файла, а не только на времени модификации, при использовании обоих охватывает все базы. ПРИМЕЧАНИЕ. По какой- то причине в PageTest AOL применяется карт-бланш против ETags. Если вы используете Apache на нескольких серверах для размещения одного и того же контента, удалите неявно объявленный inode из ETags, исключив его из директивы FileETag (т. Е. «FileETag MTime Size»), если вы действительно не используете ту же живую файловую систему.

Всегда используйте «cache-control: public» - это означает, что прокси-серверы (и кеш браузера) будут возвращать ваш контент, даже если для остальной части страницы требуется HTTP-аутентификация и т. Д.

Metalshark
источник

Ответы:

8

Во-первых, не избавляйтесь от ETag, как говорит Yahoo, если только вы не используете ферму / кластер серверов. Пока один и тот же файл всегда возвращает один и тот же ETag, если он не изменился, это очень полезная директива.

Что касается других заголовков, лучшие практики Yahoo предлагают установить Expiresзаголовок далекого будущего для статических файлов, используемых Cache-Controlдля динамического контента. тем не мениеCache-control идеально подходит для статического контента (практически никакой разницы между ними).

При изменении кэшированных статических файлов вам нужно будет изменить имя файла или добавить уникальный параметр в конец, например example.com/styles.css?v=2. Изменение фактического имени файла является предпочтительным, хотя, как отмечено в комментариях ниже.

Кстати, вы можете отредактировать правила YSlow по своему вкусу, удалить правило Etag и добавить свой собственный домен в качестве CDN. Эта статья также хорошо читается: проблемы Yahoo не ваши проблемы

DisgruntledGoat
источник
ETag один имел смысл в Apache, выполнив «FileETag MTime Size» вместо значения по умолчанию, которое включает в себя индекс (для ненадежных FS) для Y-Slow. Однако рекомендации по лучшим практикам Yahoo немного запутаны по сравнению с Page Speed. Например, в нем говорится, что использовать Cache-Control можно только на динамических страницах (как вы тоже предлагаете), однако Google рекомендует использовать Cache-Control: общедоступный для статического CSS и Cache-Control: частный для сжатых вручную файлов Amazon Cloudfront.
Metalshark
Трудно понять, что делать с этим советом для прокси. Google просто говорит «У некоторых публичных прокси есть ошибки ...», но не говорит, насколько это распространено. Рекомендуется установить заголовок Vary: Accept-Encoding, см. В нижней части code.google.com/speed/page-speed/docs/caching.html
DisgruntledGoat
Добавление параметра запроса полностью отключает кэширование этого файла в некоторых браузерах. Так что вы можете использовать подход «изменить имя файла», напримерexample.com/style_v2.css
Евгений
@Evgeny: какие браузеры? Я слышал это раньше, но я никогда не видел браузер, который на самом деле не кэширует файл (особенно если у вас есть правильные заголовки).
Рассерженная шлюха
@DisgruntledGoat на самом деле, после некоторого копания кажется, что это реликвия эпохи http / 1.0, где он был частью спецификации, которая фактически говорила, что пользовательский агент не должен кэшировать активы, имеющие строки запроса. С другой стороны, code.google.com/speed/page-speed/docs/caching.html заявляет, что прокси-серверы (squid <3.0) не будут кэшировать ресурсы, поэтому использование строк запроса для очистки кэша не рекомендуется.
Евгений
0

Изменение заголовков запросов ваших ресурсов для использования кэширования Для большинства людей способ кэширования в ebable заключается в добавлении некоторого кода в файл с именем .htaccess на вашем веб-хосте / сервере.

Это означает, что вы обращаетесь к файловому менеджеру (или куда бы вы ни добавляли или загружали файлы) на вашем веб-хосте.

Файл .htaccess контролирует много важных вещей для вашего сайта. Если вы не знакомы с файлом .htaccess, пожалуйста, прочитайте мою статью о работе с .htaccess, чтобы узнать, как это сделать, прежде чем менять его.

Приведенный ниже код сообщает браузерам, что нужно кэшировать и как долго «запоминать» это. Его следует добавить в начало вашего файла .htaccess.

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

Сохраните файл .htaccess, а затем обновите веб-страницу.

Источник:
https://varvy.com/pagespeed/leverage-browser-caching.html

Nomib Nomib
источник
Почти каждый пример ExpiresByTypeдиректив, которые я вижу, включает mime-тип text/x-javascript- действительно ли ваш сервер отвечает этим типом контента ?! (Пример слепого копирования / вставки ИМО.)
MrWhite