Это правило срабатывает, когда PageSpeed Insights обнаруживает, что ответ вашего сервера не содержит четкого заголовка кэша или что некоторые ресурсы указаны для кэширования только в течение небольшого периода времени.

Обзор

如果用户会多次访问您的网站,那么静态资源的浏览器缓存可以节省用户的时间。缓存标头应当应用到所有可缓存的静态资源中,而不仅仅是应用到一小部分静态资源(例如,图片)中。可缓存的资源包括JS和CSS文件、图像文件及其他二进制对象文件(媒体文件和PDF文件等)。通常情况下,HTML不是静态资源,默认情况下不应被视为可缓存资源。您应考虑哪些缓存政策适用于您网站的HTML。

建议

Включить кэш браузера для вашего сервера. Статический ресурс должен иметь срок действия кэша не менее недели. Сторонние ресурсы, такие как реклама или виджеты, также должны иметь срок действия кэша как минимум один день. Для всех кэшируемых ресурсов рекомендуем следующие настройки:

  • бытьExpiresустанавливается как будущая дата, минимум неделя, максимум год (мы склоняемся к тому, чтобы установитьExpiresбез установкиCache-Control: max-age,因为前者受支持的范围更为广泛)。请勿将其设为超过一年的将来日期,因为这样就违反了RFC准则。
  • 如果您知道资源将具体在何时发生变化,则可以设置较短的过期日期。然而,如果您认为资源“可能将要发生变化”,但又不知道具体时间,则应设置较长的过期日期,并使用网址指纹(如下所述)。

Заголовки Expires и Cache-Control: max-age

Эти заголовки используются для указания соответствующего периода времени, и браузер может использовать кэшированные ресурсы в течение указанного периода времени, не просматривая, предоставляет ли веб-сервер новую версию ресурса. Эти заголовки кэша мощны и не ограничены какими-либо условиями применения. После установки этих заголовков и загрузки ресурса браузер не будет выдавать никаких запросов GET для ресурса, если только срок истечения срока действия не истечет или не достигнет максимального значения времени, или если пользователь не очистит кэш.

Last-Modifed和ETag标头

Эти заголовки могут быть использованы для указания того, как браузер должен определять, идентичны ли файлы, используемые для кэширования. НаLast-ModifiedВ заголовке указана дата, а вETag标头中指定的则可以是唯一标识资源的任意值(通常为文件版本或内容哈希值)。Last-ModifiedЯвляется заголовком кэша с « более слабым » функционалом, так как браузер использует метод пробного зондирования, чтобы определить, нужно ли захватывать контент из кэша.

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

我应使用哪个缓存标头?

对于所有可缓存资源,指定一个ExpiresилиCache-Control max-age以及一个Last-ModifiedETagЖизненно важно. Вам не обязательно указывать одновременноExpiresИCache-Control: max-age;或同时指定Last-ModifiedИETag.

Использование отпечатков пальцев на веб-сайте

Для ресурсов, которые время от времени меняются, мы можем позволить браузеру кэшировать соответствующий ресурс до тех пор, пока этот ресурс не изменится на сервере, а сервер в этот момент уведомляет браузер о наличии новой версии доступной. Мы можем добиться этого, указав уникальный веб-сайт для каждой версии ресурса. Например, предположим, что у нас есть ресурс под названием « my_stylesheet.css». Мы можем переименовать файл в « my_stylesheet_fingerprint.css». При изменении ресурса меняется его отпечаток пальца, а вместе с ним и соответствующий веб-сайт. Как только сайт был изменен, система заставляет браузер заново захватывать ресурс. С помощью отпечатков пальцев мы можем даже установить будущие даты истечения срока действия для ресурсов, которые меняются чаще.

Распространенным методом распознавания отпечатков пальцев является использование 128-битного шестнадцатеричного числа, кодирующего хеш-значение содержимого файла.

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

 

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 3.0 License, and code samples are licensed under theApache 2.0 License. For details, see our Site Policies.